The vblank overflow should be
fixed. Every time the game changes screen, drawing and NMIs are disabled, an appropriate "screen init" subroutine is called then the drawing is re-enabled (see change_global_game_state subroutine.) So the fix was to process buffers in the "screen init" of the configuration screen instead of relying on the next NMI to do it. Thank you all for the help on this, I definitely learned a thing or two ... Actually four things!
As for the uninitialized nametable used when hitting, this is the behaviour with vertical mirroring. The game expects horizontal mirroring. So with vertical mirroring it initialize the bad nametable and scrolls fully on it instead of using the mirror of nametable 1 when setting scroll_x to 255. Is mirroring an option for the game in a53 or should Super Tilt Bro do something special to activate horizontal mirroring?
Bonus fix on this version: in the configuration screen, the "player 2" option changed when changing "stocks" option from "one" to "five". Saw that re-reading the code while investigating vblank overflow.