Habe mal den Code überarbeitet (ungetestet) - die if-Konstruktionen überarbeitet und ein LineData entfernt, da es ja sowieso bei jedem Schleifendurchlauf neu eingelesen wird.

Code:
#include "asuro.h" // Linienverfolgung auf die einfachste Art
#define tol 15

int main(void) 
{
    unsigned int data[2]; //Speicher bereitstellen
    Init();

    FrontLED(ON);         // Linienbeleuchtung einschalten
    MotorDir(FWD,FWD);     // Beide Motoren auf vorwärts

    while(1)            // Endlosschleife, ASURO soll beliebig
    {             
        LineData(data);     // aktuelle Helligkeitswerte der
                            // Fototransistoren einlesen
        if (data [0] > data [1] + tol )
        {
            MotorSpeed(140,80);
            MotorDir(FWD,RWD);
        }
        else if (data [1] > data [0] + tol )
        {
            MotorSpeed(80,140);
            MotorDir(RWD,FWD);
        }
        else
        {
            MotorSpeed(120,120);
            MotorDir(FWD,FWD);
        }
    }
    return 0;
}
Am Programm selber kann man nicht mehr viel Laufzeit optimieren.
Du kannst noch ein wenig mit den Geschwindigkeitswerten und der Toleranz spielen, dadurch lässt sich das noch optimieren.
Außerdem ist das Rückwärtsdrehen der Motoren kontraproduktiv. Du willst ja voran kommen. Wenn er oft die Drehrichtung FWD/RWD ändern muss, bleibt er eher auf der Stelle stehen. Also lieber den Motor, der bisher rückwärts fuhr in Vorwärtsrichtung drehen lassen, vielleicht mit geringer Geschwindigkeit.
Da musst du viel probieren. Aber Versuch macht klug
Ansonsten stößt dieses Regelverhalten halt irgendwann an seine Grenzen. Ist ja ein Zweipunktregler. Man könnte es einmal mit einem P-Regler (Software) versuchen.
Auch eine andere Anordnung der Sensoren (Abstand) kann viel am Regelungsverhalten ändern. Frage ist eben: willst du der Linie sehr präzise und langsam folgen oder grob und schnell ? Je schneller man folgen will, desto weiter sollten die Sensoren auseinander.

Grüße,
Bernhard