Wie Markusj schon angegeben hat. PollSwitch kann falsche werten ausgeben. Eben andere wenn die Motoren angeschaltet sind. Erst testen ob es die richtige Werten gibt, oder kalibriert werden muss.

Wieso muss die Funktion wait ein Float wert bekommen? Und wie viel Sekunden Dauer verwendest du als Parameter für Endloss-schleife-verzögerung. Vielleicht entsteht hier mehr Verzögerung als gewünscht. Float-rechnerei kostet sehr viel Prozessorkraft (und Speicherplatz) für ein einfache Mikrocontroller als ein Atmega8. Du könntest es viel einfacher für Asuro machen wenn du es zu ein Msleep Funktion umbaut das nur mit integer werten arbeitet. Und ein ganz-Zahl von Millisekunden wartet.

Code:
void Msleep (int dauer)
{
  int z;
  for (z = 0; z < dauer; z++)
  Sleep (72); // Warte ein Millisekunde ( mit Originale Asuro Lib!!)
 }
Dazu wundere ich mich auch über dein Letzte Else-zweig:

...
else
{
BackLED(OFF,OFF);
StatusLED(YELLOW);
SpeedLeft= 120;
SpeedRight= 130;

}
...
Wie arbeitet es wenn du SpeedLeft und SpeedRight nicht auf 120 und 130 einstellt (aber unverändert last) wenn die Linie im mitten der Sensor befindet (absoluten diff-offset weniger als 4). Dein Änderung auf diese niedriger Motorspeed werten macht das steuern vielleicht schlimmer.