I agree with Lost Templar. It's likely your transfers are not all fully executing during vblank. You can debug one of the failed transfers. I assume you're using DMA for this. In most debuggers, you can break right before the start of the transfer (before write to $420b) and check your vertical scanline count ('VC:' in Geigers. Not sure offhand if it's the same on other debuggers) and then see what it's at when it finishes on the next instruction (CPU pauses execution during DMA).
The transfer needs to start and finish entirely during vblank. Vblank period is line 225 to 0 (rollover to next frame).
Often times NMI takes a differing amount of time to run each frame. I've been caught by this type of thing a few times where the normal game's NMI code takes much of vblank and there's little time left over for me to do anything extra at the end. Then sometimes my transfer fail while other times they complete in time.
If you find your transfers are not finishing in time, you will need to use some trickery by doing smaller transfers per frame or splitting up your existing transfers across frames. Alternatively you could do a force blank if the transfer takes place between visual screen loads.
You should be noticing a theme here on all these issues. They're simplest to debug by working backwards. You see that VRAM is not getting written sometimes. So, check those transfers to those locations next. Either the transfer is not working (due to not being during vblank), there is a bug in the code, or the source data is not as you expect. It can only be one of those few things! Break it down to simple steps and make it easy for yourself.