Wich VDP operations do you perform during vblank? Can't you split road rendering in several parts and use a flag to regulate vdp accessess inside and outside the vblank instead of di/ei?
I did this way on Freedom Fighter to update scrolling (during normal program flow) and sprites (hooked in the ISR)