if (millis() > (whileTime) + 4000) { // wenn nach xxx Zeit nix kommt, aufhören sonst steht ewig hier
Diese Zeile ist anfällig für den Millis-Überlauf alle 49Tage. Hat whileTime + 4000 einen Überlauf, dann steht da eine Zahl zwischen 0 und 3999, wodurch am laufenden Band abgebrochen wird. Noch mehr solche Konstruktionen im Sketch könnte zu seltsamen Effekten führen.
Richtig ist if (millis()-(whileTime) > 4000). Hier funktioniert auch mit Überlauf alles richtig.