Questions on programming logic?
Ah yes, this problem.

Note the declaration of currentMillis:

unsigned long currentMillis = ...;


And now note the declaration of previousMillis:

long previousMillis = ...;


You wouldn't think that one little word could make that much difference, but it does. It completely changes how C performs mathematics. previousMillis must also be unsigned or you will get undesired results.