I did some investigating of power on timing using the numerous playback attempts of Roger Rabbit I recorded. As it turns out it wasn't that hard to nail down exactly what the valid power on states were. In the following results, ofst is the offset from cycle zero, scanline 0 where the ppu starts that the cpu starts executing cycles, vbl is the state of the vbl flag at power on, and even_odd is the parity of the frame (one cycle skipped every other frame for NTSC consoles.)
ofst = -1, vbl = true, even_odd = false; gives no match to console.
ofst = -2, vbl = true, even_odd = false; gives exact match to console. Gives correct items.
ofst = -3, vbl = true, even_odd = false; gives exact match to console.
ofst = -4, vbl = true, even_odd = false; gives exact match to console.
ofst = -5, vbl = true, even_odd = false; gives exact match to console.
ofst = -6, vbl = true, even_odd = false; gives no match to console.
ofst = -1, vbl = true, even_odd = true; gives no match to console.
ofst = -2, vbl = true, even_odd = true; gives no match to console. Gives correct items.
ofst = -3, vbl = true, even_odd = true; gives no match to console.
ofst = -4, vbl = true, even_odd = true; gives no match to console.
ofst = -5, vbl = true, even_odd = true; gives no match to console.
ofst = -5, vbl = false, even_odd = true; gives no match to console.
ofst = -4, vbl = false, even_odd = true; gives no match to console.
ofst = -3, vbl = false, even_odd = true; gives no match to console.
ofst = -2, vbl = false, even_odd = true; gives no match to console.
ofst = -1, vbl = false, even_odd = true; gives no match to console.
ofst = -5, vbl = false, even_odd = false; gives no match to console.
ofst = -4, vbl = false, even_odd = false; gives no match to console.
ofst = -3, vbl = false, even_odd = false; gives no match to console.
ofst = -2, vbl = false, even_odd = false; gives no match to console.
ofst = -1, vbl = false, even_odd = false; gives no match to console.
ofst = 0, vbl = false, even_odd = false; gives no match to console.
The results are pretty definitive. No valid states result from even_odd being true or from VBL being false. The documentation says that VBl is expected to be on some of the time, but I couldn't find any cases where it was off that matched playback.
I originally expected valid ofst values clustered around 0, but I guess the CPU takes an extra cycle to reset, so -3 is the next most likely one, which is what we see here. values of -5 and -2 are possible but of low probability. (Mesen appears to match -5 in 0.9.9.)
I then tested nightshade, and got a syncing run using -2, but only with very low probability ~1/20 or less. Testing with -3 resulted in a desync, not sure why, maybe something to do with MMC3 clocking. -4 did result in a syncing run though with much higher probability (worked on the third try.) A run of Donkey Kong on the -4 setting also synced to console.
So with all of that, it seems very likely that the new startup state will be ofst = -4, vbl = true, and even_odd = false. I'm going to get complete runs of Nightshade and Roger Rabbit tested on these setting, and then try Battletoads, if everything works I will update NESHawk settings in master.