I looked a little into Rockman to see how far off things were in IceMan stage to make the 'DelayWaterCurrent' glitch work in BizHawk.
First, the idea of the glitch is that during lag frames, it's possible for an NMI to interrupt processing when ROM bank is changed to 6. If the NMI occurs after the ROM bank is changed, but before the change is stored in the backup location ($42) then bank is not restored correctly once NMI is exited.
This happens in FCEUX here:
c346972718 A:00 X:1F Y:04 S:FD P:nvUBdIZC $D89B:A9 06 LDA #$06
c346972720 A:06 X:1F Y:04 S:FD P:nvUBdIzC $D89D:8D 06 C0 STA $C006 = #$06
c346972731 A:06 X:1F Y:04 S:FA P:nvUBdIzC $D4A8:48 PHA (NMI)
.
.
.
c346975662 A:05 X:05 Y:00 S:F7 P:nvUBdIzc $D571:9D 00 C0 STA $C000,X @ $C005 = #$05
.
.
.
c346975697 A:06 X:1F Y:04 S:FA P:nvUBdIzc $D582:40 RTI
c346975703 A:06 X:1F Y:04 S:FD P:nvUbdIzC $D8A0:85 42 STA $0042 = #$05
In BizHawk, the NMI occurs too early by only 2 instructions:
D898: F0 BEQ $D89B A:00 X:1F Y:04 P:37 SP:FD Cy:346940446 nvTBdIZC
====NMI====
.
.
.
D582: 40 RTI A:00 X:1F Y:04 P:26 SP:FA Cy:346943422 nvTbdIZc
D89B: A9 LDA #$06 A:00 X:1F Y:04 P:27 SP:FD Cy:346943428 nvTbdIZC
D89D: 8D STA $C006 A:06 X:1F Y:04 P:25 SP:FD Cy:346943430 nvTbdIzC
D8A0: 85 STA $42 A:06 X:1F Y:04 P:25 SP:FD Cy:346943434 nvTbdIzC
Two instructions are all that seperates possible and impossible in this case. The glitch itself is has to occur exactly between changing bank and storing in $42. Unfortunately it's hard to say why those 2 instructions of difference exist between FCEUX and BizHawk, so this is about all I know for now.
I'll try some available LUA scripts to see if another setup is posible. Also, I'll try changing ppu power up timing as this is known to vary on console and might change timing by the small amount we need here. I also tested on Mesen and the setup fails there as well.
If nothing else, I find this to be a very interesting example of just how difficult it can be to know what is an emulator glitch and what isn't.