runEvery (the next Blink Without Delay)

Yes. However, it turns out it doesn't matter. I've tested with signed and unsigned 8-bit and 16-bit integers well beyond their rollovers and it works throughout. This sketch ran successfully on my uno for over an hour (I piped the serial output to a file and it was over a megabyte by the end)

#define runEvery(t) for (static typeof(t) _lasttime;\
                         (typeof(t))((typeof(t))millis() - _lasttime) > (t);\
                         _lasttime += (t))

void setup() {
    Serial.begin(115200);
}

void loop() {

    // char version
    runEvery((int16_t) 50) {
        Serial.print("50 ms Current time: ");
        Serial.println(millis());
    }

    // int version
    runEvery(5000) {
        Serial.print("five seconds Current time: ");
        Serial.println(millis());
    }

    // long version
    runEvery(10ul * 60ul * 1000ul) { // ten minutes
        Serial.print("Ten minutes are up! Current time: ");
        Serial.println(millis());
    }
}

edit: I guess I made some changes, so undoing those