Il problema risiede in:
- l'Arduino usa un risonatore ceramico che non ha una grossa precisione. Perdere qualche secondo nel giro di pochi minuti non è strano, è nella norma;
- ricordati che ora il tuo Arduino sta usando 2 timer (lo 0 e il 2) con 2 ISR che si bloccano a vicenda, quindi i tempi vengono alterati anche da questo.
Se vuoi una precisione maggiore, puoi usare il timer 2 tramite il modulo Real-Time Counter dell'Atmega328 collegato ad un quarzo esterno da 32768 Hz. Lavorando con uno standalone puoi disattivare il timer 0 e lasciar lavorare solo il timer 2 impostato per avere 1 overflow ogni millisecondo. A questo punto il cronometro sarebbe molto preciso.