I talk a bit about this in this older thread.
Most of it is still relevant but you can see what your current Starling version does for touch processing in TouchProcessor.advanceTime
The long and short, Starling queues up touches from Flash's touch events. The timestamp on Starling touches is the time correlating with the Starling advanceTime values, not the original timestamp from the originating Flash TouchEvent.
So it is certainly possible for multiple touch (mouse) callbacks to be processed for one touch in the same advanceTime step with the same timestamp values.
The quickest fix for your code might be just to not blindly use the last previous touch timestamp but only compare a new and previous timestamp and positions to calculate speed based on a timestamp being different than the last one you capture (either not equal or at least greater than a time difference corresponding to your expected fps)