I think it's just a matter of timing. If the output takes a millisecond or two there is no guarantee that the bit of code that compares the current millisecond to 6000 or 6005 will happen to be executed during that millisecond.
If you are looking to trigger something at a particular time it is best to check for >=time because the exact time may have passed. Of course it will then trigger every time AFTER the specified time so you need a flag somewhere to keep track of the triggering. That way you can trigger only once:
boolean flag = false; // Global variable. 'boolean' can only be 0/false/LOW or 1/true/HIGH
if (!flag && millis() >= 6000)
{
flag = true; // Event triggered!
// This stuff is done once at 6 seconds after the Arduino starts.
}