Gah. I didn't fix my source from the first time you saw this error. Pls change RLY_OFF to RLY_IDLE and ensure that bRelay = false; occurs in RLY_HOLD, just before stateRelay = RLY_IDLE, like this:
void relay( void )
{
uint8_t
stateRelay = RLY_IDLE;
static uint32_t
timeRelay;
uint32_t
timeNow = millis();
switch( stateRelay )
{
case RLY_IDLE:
//waiting for flag to indicate relay sequence
if( bRelay == true )
{
timeRelay = timeNow;
stateRelay = RLY_ON;
}//if
break;
case RLY_DELAY:
//delay before turning the relay on
if( millis() - timeRelay >= K_RELAY_DELAY_TIME )
{
digitalWrite( relay2, LOW ); //relay on
timeRelay = timeNow;
stateRelay = RLY_HOLD;
}//if
break;
case RLY_HOLD:
//relay on-timing
if( millis() - timeRelay >= K_RELAY_HOLD_TIME )
{
digitalWrite( relay2, HIGH );
bRelay = false;
stateRelay = RLY_IDLE;
}//if
break;
}//switch
}//relay