This strikes me as a combination of loading time and the way RMMZ/MV handles frame timing compared to XP/VX/VXAce. In the earlier engines, there isn't any sort of frame skipping so if the frame rate drops you will see every frame when it's ready even if that means time slows down. I am pretty sure MZ/MV has some kind of frame skipping and deferred loading, you may be unlucky enough to get frames being rendered in between the first frame unloading and the next frame fully loading so there's no guarantee you will be able to get around this in all cases, unless all of the graphics are loaded simultaneously and kept. I can't seem to reproduce the issue with what I have available.
Here's my hacky suggestion. Instead of breaking the animation frames into individual oversize character sheets, each character sheet can hold 12 frames. Create three events to hold these sheets and a fourth as a parallel process to control the other 3. The first visible event holds a sheet with the first 12 frames of animation, the second has the next 11 frames, the third has the last 7. The second and third should be initially set to one of the empty frames. Set the speed and frequency of all 3 to their highest settings, turn off stepping animation, walking animation, direction fix, turn on through for events two and three.
For your parallel process, start by moving all 3 events on top of each other using "Set Event Location...", then begin a Loop. Inside the loop, do a move route on the first event and use 'Change Image' to run through the different animation frames. At the end of the first set of frames, make a one-step move route that sets the second event to its first animation frame, then make another one-step move route to set the first event to transparent. Then make the move route to run the second event through all of its frames. At the end of those frames, make a one-step move route to have the third event set to its first frame, another one-step to make the second event set to its invisible frame, then run through this event's frames. At the end of this one, you'll want to make a one-step move route that makes event one visible again, followed by a one-step move route to set the third event to an invisible frame. Then the loop repeats. Make sure the move routes are in the order described, so there's no situation where both events are invisible at the same time.