There is a sample project that shows how to use the Scheduler dynamic loading. It's a more real-world scenario, it uses a database backend (unlike the demos that come with DayPilot Pro for JavaScript download).
https://code.daypilot.org/85715/html5-scheduler-with-dynamic-event-loading
You can give it a try and compare it with your implementation.
The key thing is that you need to update the event position using onEventResize/onEventMove before the events are refreshed (e.g. using onScroll). With the default eventMoveHandling value ("Update") the events are updated on the client side immediately so they will move correctly.
However, the dynamic loading fires onScroll to reload events quite often. If it loads the old event state it will look like it moved the event back to the previous position.
Let me know if it didn't help.