(Without looking at your protocols...)
That out-of-sync behavior often happens when the device takes an unusually long time to reply once in a while. (E.g., a small controller that has to do something at higher priority for a while.)
The IOC times out and sends the next request, then the device sends the reply to the last request, which the IOC doesn't like. The IOC sends the next request, the device answers with the reply for the previous request, and so on...
Try increasing your timeouts, so that the IOC waits even in the cases where the device takes a break. Analyze your log timestamps. Are specific commands taking longer? Increase the timeout for those. I have also seen devices taking a nap after specific commands complete successfully - in those cases, "wait;" instructions in the protocol can keep StreamDevice from sending the next command immediately.
Good luck!
~Ralph