Alright so update: I just went for a drive and its definitely something other than the timing code causing the freeze. I ran just the timing with serial output of the rpm, and it never froze up. It hanged sometimes when they revs changed too fast, but i know that's a tolerance thing.
I changed how the dimmer works, instead a boolean is stored and recalled every 250ms using millis(), the dimmer() void no longer calls the leds or ledsDimmed voids, instead an if/else statement for the dimmer boolean inside void loop() does instead, this way the leds are not showed through the dimmer function. I also managed to get else if statements for showing colors working.
But despite all of that, seemingly around 3000rpm the arduino just freezes up, and abruptly. The serial output shows a page full of numbers around 3000 and then the last output is 0.45, every time. I tried putting the if and else statements for leds() and ledsDimmed() between noInterrupts() and interrupts() and that didn't help.