Hola,
Si cierras con punto y coma la sentencia if(), la estás anulando.
Si después del delay ya no coinciden los minutos, solo tienes que controlar la hora
Yo probaría algo así:
int hancomido = 0;
void comedero()
{
if (Reloj.GetHour() == CFG.COMIDA_H && Reloj.GetMinute() == CFG.COMIDA_M && hancomido == 0)
{
SetRele( 4, PIN_D_COMIDA, HIGH );
delay(3000);
hancomido = 1;
}
else
hancomido = 0;
}