Da der Timer weiterläuft, kann es sein, dass bis zum b=timer1 dieser schon wieder um 2 Punkte gestiegen ist, deswegen werden diese wieder abgezogen.
Genau aus diesem Grund hab ich dem Themenstarter auch den ICP Pin (Interrupt) empfohlen, weil man sich hier die Nachrechnerei sparen kann.
Tritt ein ICP Interrupt auf wird sofort der aktuelle Zählerinhalt von TCNT in das ICR geschrieben und kann dort, während des ICP Interrupt, in aller Ruhe ausgelesen werden.
Du kannst natürlich in dieser Routine auch gleich den 2 ten Port deiner Lichtschranke abrufen und damit die Richtungsinformation gewinnen.
Das sollte so ähnlich funktionieren wie bei einem Drehimpulsgeber.
Das abziehen eines fixen Wertes, wie von Peterfido vorgeschlagen, kann zu Problemen führen, wenn man Teiler (Prescaler) einsetzt, weil Du ja nie weisst an welcher Stelle der Prescaler gerade steht. Also müssten dann manchmal 1, manchmal 2, oder manchmal 3 abgezogen werden. Da man den Zählerstand des Prescalers nicht auslesen kann ist das ein reines Ratespiel.
Ein weiteres Problem das dabei entstehen kann ist das was ich "Overtaking Effekt" nenne.

Der kann passieren wenn man zusätzliche Register mit einem Timer Overflow Interrupt hochzählt.

Dein Zähler hat einen Wert knapp vor dem Timer Overflow erreicht.
Nun tritt ein Signal Interrupt auf. Der Timer erreicht nun den Wert 0 und würde den Timer Overflow Interrupt triggern.
Das funktioniert aber nicht, da der Controller ja schon einen Interrupt abarbeitet. Es fehlt Dir also in deinem Überlaufregister 1 Count. Du liest also in deinem Signal Interrupt den Überlauf Zähler aus und das TCNT Register, das ja wieder auf 0 steht. Somit machst Du in deiner Berechnung einen Fehler von 255 Counts (Bei einem 8 Bit Zähler).

Ich hab mich mal bei einem 220V Dimmer mit so einem Problem schon mal 3 Tage rumgeschlagen (hat immer geflackert) bevor ich auf diesen blöden Effekt gestoßen bin und die Timer Routine komplett umschreiben musste.

@Knut
Mit "Bascom" Quelltext kann ich Dir leider nicht dienen, ich progge zur Zeit in "C" und Assembler.
Ein ATMEGA 128 mit 16MHz langweilt sich bei deiner Aufgabenstellung.
Die Prescaler einstellungen sind auch von der gewünschten Präzision abhängig.
Je kleiner der Teilerfaktor umso genauer die Messung, allerdings verbunden mit erhöhter Controllerbelastung.