In this case, I was getting message build-up even with when the
subscriber used a queue size of one. It seems that the teleop message
where small enough to accumulate in the TCP kernel or HW buffer and
not being discarded while the callback was running. This can be easily
identified by looking at the message timestamp. In our case, the
message age was increasing (obviously, you can only evaluate that on
machines with synchronised clocks).

If you have a way to reproduce this, please file a ticket -- roscpp should be draining the sockets as quickly as possible whether or not your callbacks take a long time.  They should be totally decoupled.

Josh