De-syncing can be controlled by the server. If the server thinks you are speed hacking (even false flags), then it will throttle the data received from the client.
This means that the movement request is dropped periodically and the movement rejection notification may not be sent to the client.
NetStates are paused and incoming data is queued during a world save, so the chances of a de-sync happening would be greater since when the NetState is un-paused, it flushes and handles all the backlogged data, which could potentially trigger throttling.
Movement acknowledge/reject packets synchronize the current movement "sequence" between the server and client and if these two numbers are not synchronized, it can cause issues.
This is most notable when using mouse movement to control High Seas boats. Currently, the mouse movement handlers do not reply to the client with regular movement acknowledge/reject requests so therefore the client de-syncs - it is much more obvious when you 'dismount' the boat then try to run around on deck, and even more-so if you're a gargoyle trying to fly.