Con i millisecondi non si fanno mai i confronti di uguaglianza (millis - qualcosa == 1000) perché se per qualche motivo perdi l'attimo poi il confronto non è più vero. Sempre >= oppure <=.
Poi non so rispondere alla tua domanda "potrebbe funzionare?" perché vedo che manca roba nello sketch (ad esempio la seconda funzione "rpm_fan" che riattacchi all'INT0, e infine non mi pare che tu stacchi l'altro vettore di interrupt.