Troubleshooting: Part of a program failing after ~30s

If you use:

unsigned long interval;   // Timer interval in milliseconds
unsigned long startTime = 0;  // Global (or static) 
.
.
.
startTime = millis();
.
.
.
if (millis() - startTime > interval)
     // This runs after the interval has expired

This code works across the roll-over.