Hallo Dominik,
deine Lösung und die von Hardware-Entwickler liegen von der Berechnung her nicht weit auseinander.
Bei dir: Prescale 256, Timer läuft nach 250 Ticks über, Zähler läuft bis 250 == 256 * 250 * 250 = 16M
Bei ihm: Prescale 1024, Timer matched nach 125 Ticks, Zähler läuft bis 125 == 1024 * 125 * 125 =16M
Seine ISR wird nur halb so oft pro Sekunde aufgerufen, verbraucht also weniger Prozessorzeit.

Wichtiger ist der Unterschied mit CTC Mode und Timer vorladen. Bei deiner Art bist du in Teilen von der Ausführungszeit der ISR abhängig. Speziell bei kleinen Prescale Werten ergeben sich dadurch signifikante Abweichungen.
Anders der CTC Mode. Der Timer läuft praktisch komplett in HW, inklusive Zurücksetzen. In der ISR änderst du nichts am Timer.
Leider wird deine Art in allen Tutorials, Foren und auch in der Bascomhilfe immer als erstes gezeigt und scheint auch besser verständlich zu sein. Aber ich würde dir raten, grundsätzlich darauf zu verzichten.

Der CTC Modus funktioniert in Bascom so:
Config Timer2 = Timer, Prescale = 1024, Clear_Timer=1, Compare = Toggle
Compare2 = 124 '125 Ticks, weil der Timer bei 0 anfängt (deshalb 125 - 1), du kannst auch OCR2 = 124 schreiben
On Compare2 Timer_Isr
Enable Compare2

Allerdings glaube ich nicht, dass dadurch mehrere Sekunden pro Minute zu erklären sind.
Zeig doch mal dein ganzes Programm.