previousMillis und currentMillis sollten ja beide unsigned long sein. Wenn dann previousMillis 1000 ist und millis() den Wert 0 hat (oder vielleicht 1 wenn setup() mehr Zeit braucht), hat man 0 - 1000. Da der Wertebereich aber nur positiv ist hat man einen Überlauf und die Differenz ist ist in der Nähe des oberen Limits von unsigned long.
Aber wie gesagt, ist das nicht wirklich schön und man sieht auch den ersten Blick nicht was gemacht wird.