The PPU updates the OAM address ($2003) as it renders. Similar to how it updates loopy v as it renders. Shutting the PPU off mid-frame will result in the OAM address becoming "scrambled" (really, it's just set to something unexpected because the PPU was messing with it prior to rendering being turned off).
However, if rendering remains on for the whole frame, the OAM address consistently finds its way to $00. Therefore, in your emu, it's easiest to set $2003 to 0 at the end of rendering if the PPU is on (and maybe set it to something nonzero if the PPU is switched off midframe).
Relevent discussion here:
http://nesdev.com/bbs/viewtopic.php?t=1366