Damit das funktioniert, muss er nach jeder Teilbewegung prüfen, ob die Bedingung erfüllt ist. Dein Code prüft EINMAL ganz am Anfang die Bedingung und dann läuft der Block durch, je nach Ergebnis.
Wie wäre es mit
Code:
Ende = 0;
while (! (Bedingung == weiß) || Ende){
    drehe LINKS_10ms;
    Zaehler++;
    if(Zaehler >= ZaehlerMax){
         Zaehler = 0;
         Ende = 1;
    }
}
Ende = 0;
while(! (Bedingung == weiß) || Ende){
    fahre VOR_10ms;
    Zaehler++;
    if(Zaehler >= ZaehlerMax){
       Zaehler = 0;
       Ende = 1;
    }
}
usw.
Erst links und dann wieder rechts drehen führt natürlich auch nicht zum Ziel, wenn er nicht zwischendurch zB mal vor fährt.
Viel Spaß