I think I've cracked exactly how frame timing works on the Model 3: every game on startup writes a value into TileGen register 0x08, and this value is how many active video lines to display before signalling Real3D to flip the ping pong bit and start calculating polygons for the next frame. Most games write 0xEF (239) or 0xEE (238), although The Lost World writes 0x17F (383), Daytona USA 2 writes 0x14F (335), and Sega Rally 2 and Star Wars Trilogy Arcade both write 0x170 (368). Note that The Lost World sets the value to exactly one less than the number of active video lines (384).
Tests performed on a real Model 3 board running Virtua Fighter 3 revealed that ping pong flip occurred about 66% of the frame time after IRQ2; 239 display lines + 40 blanking lines = 279 lines, and 279 / 424 = about 65.8% of the frame (!!!) I must admit I got quite excited when I figured this out
Both Sega Rally 2 and Star Wars Trilogy Arcade wait until IRQ2 before starting to process the next frame on the CPU side, whereas all other games wait for ping pong flip. With the current frame timing in Supermodel this means 33% of PowerPC cycles are wasted, but these games set it up so that ping pong flip occurs much later in the frame and so fewer cycles are wasted on real hardware (about 4% total).
In addition, I have deduced what IRQ8 and IRQ4 represent: they signal when Real3D has finished geometry T&L and rasterization respectively. The timing debug screens present in most games list GP as the time between IRQ8 and ping pong flip and DP as the time between IRQ4 and IRQ2. This basically confirms that 3D rendering is done in two separate stages on Model 3, which I had been theorizing about for a while.