Non mi convincono i controlli...
Codice PHP:
if ($ora >= "21:29" && $ora <= "23:01"
Se provi a fare i controlli prima sull'ora e poi sui minuti? Del tipo
Codice PHP:
if ($ora >= 21 && $ora <= 23) {
   if(
$minuti >= 29) {
      
// Fai qualcosa...
   
}

Ora sicuramente è da aggiustare come codice, però può essere un'idea...anche perchè date() non restituisce una stringa quando lo usi per conoscere l'orario. Io anche ho usato in un progetto una cosa del genere ed ho fatto così, come se facessi un confronto tra interi e non tra stringhe...