Anche se ammetto di aver letto molto velocemente il messaggio, provo a fornire un suggerimento che potrebbe risolvere il problema alla radice: invece di usare una temporizzazione così precisa con i Timer, che in realtà così precisi non sono mai, perché non usi un intervallo sensibilmente più basso (es. pochi secondi) e magari non gestisci altrove il controllo del tempo che è trascorso?

Spiegandomi meglio, puoi usare un Timer che vada in esecuzione spesso, più frequentemente dell'intervallo effettivo che ti serve, e all'interno del codice di gestione dell'evento fare le opportune verifiche per determinare se, in base ai criteri che devi implementare, il tempo che ti sei prefissato è effettivamente trascorso oppure no.

In breve, deleghi al codice l'effettivo calcolo del tempo che è trascorso, indipendentemente da quando viene eseguito il timer.

Ricorda che puoi sempre sottrarre delle date e ottenere degli oggetti TimeSpan che ti forniscono il tempo trascorso, oppure prendere una certa data/ora e sommare a essa del tempo, sfruttando i metodi forniti dal tipo DateTime, in modo da determinare la data/ora in cui dovrà accadere un certo evento, e poi scrivere il codice necessario a controllare se quel momento è stato raggiunto oppure no, indipendentemente dal Tick del Timer, aggiornandolo di conseguenza se ti serve (come nella condizione che hai espresso nel tuo problema).

So che la spiegazione è puramente teorica e manca un esempio di codice, ma può essere già uno spunto di riflessione.

Ciao!