Thanks DrAzzy for the info on handling the roll-over. I'll delete that from my final code. The core I'm using is the one that is bundled with the Arduino IDE which is the version by David Mellis (or maybe I added it and just forgot about that - I'm not opposed to changing cores if there is a better one out there). Yes, the reconfiguration of the timer does affect millis() and delay(), but I have already calculated the correct values I need for my time keeping. This is also why I commented it out of code, but I still have the issue.
I didn't think my code was broken, but it is a little frustrating not being able to understand why having the serial command at the start of the loop causes everything to work fine, but a delay does not.
Some more background on the setup of this circuit. The fan is a 12v CPU fan with the tach output pulled high to the 5v rail via a 1k resistor. This keeps the pulses at 5V so that if the fan is disconnected, the rpmPin sees a steady 5v and therefore no movement. If I start the program in this condition, then about 4 secs after start the "error" condition is run and the LED flashes. If I start the program with the fan plugged in and wait about 5 secs then unplug the fan, nothing happens. The program continues to run without the "error" condition. When I uncomment the Serial command and start the program with the fan on and then unplug the fan after about 5 secs, the "error" condition is run and the led flashes (as it should - and I can plug the fan back in and the program then goes back to normal function).