millis e' un contatore interno della MCU, perche' invece di resettarlo (che non e' proprio il massimo) non usi un'altra variabile aggiornandola in base al conteggio di millis, oppure ti limiti semplicemente a controllare che il tempo sia trascorso indifferentemente dal fatto che vada o meno in overflow ? (con il sistema "if (millis() - oldmillis) >= tuotempo", anche se va in overflow il conteggio non sballa)
Casomai, sara' il fatto che il clock interno della MCU (e quindi anche i calcoli su tempi lunghi fatti usando millis) non e' preciso come un'orologio, che potrebbe crearti problemi ... se i tempi sono cosi lunghi e ripetitivi, forse sarebbe meglio un'RTC, come ad esempio il DS3231, costa poco, e' abbastanza preciso, ha il quarzo interno ...