comparison of two unsigned bytes strange behavior

My suspicion is that the calculation is being done using integers but try this

void setup()
{
  Serial.begin(115200);
  byte start = 253;
  byte mil = 253;
  byte period = 3;
  mil++; // 254
  mil++; // 255
  mil++; // 0
  mil++; // 1
  mil++; // 2
  Serial.println(mil); // prints 2
  Serial.println(mil - start); // prints -251
  if ((byte)(mil - start) >= period)
  {
    Serial.println("Time passed");
  }
}

void loop()
{
}