Why is my variable not getting updated?
I modified your code to produce a working example:

const unsigned long fiveMinutes = 20 * 1000UL;
unsigned long lastCheck = 0 - fiveMinutes;
unsigned long now = 0;

void setup ()
  {
  Serial.begin (115200);
  Serial.println ();
  Serial.println ("Starting.");
  Serial.println (fiveMinutes);
  }  // end of setup

void doStuff ()
  {
  Serial.println ("Doing stuff");
  }    

void loop() {
  now = millis();
  if ( now - lastCheck &gt;= fiveMinutes ) {
    doStuff();
    lastCheck = now;
  }
}


I reduced the interval to 20 seconds, and Ignacio Vazquez-Abrams is correct about the initial test, however apart from that, I see "Doing stuff" every 20 seconds.




  I thought I could update global variables inside subroutines ...


You can.



Are you sure you didn't have:

void loop() {
  unsigned long lastCheck;
...