It's simple, NES can't handle the running speed. You ever try using the run fast code in Super Mario Bros? NES can't handle those speeds.I'm sorry about what I'm going to say, but let what has to be said be said. This is just complete bullshit and you have so much no idea what you're talking about.
If the game crashes, there's a good chance you messed up something with the stack. Either you pulled too much bytes, or you pushed bytes you didn't pull later. Another common thing is that there's a jump table, and for some reason you index a routine outside of the jump table's bound, this causes the game to crash. Another possiblity, a loop somehow became an infinite loop that never exists. Those are the 3 possibilities as for how your game crash, in the order from the most likely to least likely.
Use a debugger to see what your CPU is doing after crashing. If it is still running valid code, then you are in the infinite loop situation. If it is jammed somewhere lost in the address range, then it's either a stack or a jump table issue.
The best way to fix this is to use Nintendulator's logger. Just before the game is about to crash, start the "code logger", which will write all instructions the CPU is running to a .txt file. Then enable the one-frame mode with Ctrl+F and run a couple of frames with the space button. Warning, the log file will grow huge very quickly ! That's why you should do just a few frames, if you do that at full speed your computer will crash as it won't be able to follow all the instructions the CPU is executing, which is several hundred thousands per second.