Damit ich es richtig verstanden habe eine kurze Zusammenfassung:
Taktfrequenz f = 3.6864MHz
Vorteiler für Timer0 V = 1
Setzwert für Timer0 Z = 210
Benutzt wird Timer0 eines ATmega8

Im Prinzip hast Du korrekt gerechnet, aber leider macht Dir die Hardware des Timers da nicht mit. Mit dem Laden des Wertes 210 und anschließendem Starten des Timers wird dieser ab 210 bis 255 zählen und dann ab 0(!!!) weitermachen. Der allererste Zyklus des Timers dauert tatsächlich 46 Takte. Alle folgenden dauern dann aber 256 Take und damit stimmt die Frequenz nicht, denn der Wert den Du ins Timer0-Register schreibst wird nicht als "reload"-Wert gespeichert!!! So eine Funktion bietet nur Timer1, der kann dann gleich noch den Portpin OC1B oder OC1A per Hardware toggeln und damit stimmt die Frequenz dann ganz akkurat.
-> Schau ins Datenblatt des ATmega8, die Timer-Operationen sind da genau beschrieben.

Damit Du den Timer0 wie geplant nutzen kannst, mußt Du jedesmal den Setzwert (210) neu laden, wenn der Timer exakt bei 0 angekommen ist. Da aber die Interruptbearbeitung um ein paar Takte schwanken kann, muß die SW den neuen Setzwert errechnen und das ist etwas komplizierter:
Wenn der Zähler auf 0 steht wird der Interrupt ausgelöst. Bis der Interrupt seine Arbeit aufnimmt und während der Abarbeitung wird jeder Takt weitergezählt. Wenn jetzt also die Stelle erreicht ist, an der der Setzwert neu geladen werden muß, dann müssen die bereits abgelaufenen Takte (x) natürlich abgezogen werden um den korrekten nächsten Interrupt zu bestimmen:
3686400Hz/(256-(210+x))
Also muß Deine Interruptroutine das Zählerregister auslesen um die bereits vergangenen Takte zu bestimmen, diesen Wert und einen bestimmten konstanten Wert (für die folgenden Operationen incl. der Schreiboperation) auf die 210 addieren und dann das Ergebnis zum Timer0-Register schreiben. Damit stimmt dann die restliche Zeit bis zum nächsten Toggeln.

Für den kompletten Ablauf (inklusive Interrupt-Reaktionszeit, Interruptablauf und Interrupt-Rücksprung) hast Du maximal 45Takte, mindestens 41Takte Zeit, denn vor dem nächsten Interrupt wird mindestens ein kompletter Befehl (mit max. 4Takten) abgearbeitet. Das wird eng.

Das ohne Oszi zu debuggen würde ich mich nicht trauen deswegen mein Tip:
Nimm lieber den Timer1 - ist dann doch einfacher zu programmieren.
Den Sendewandler z.B. an Pin OC1B, den Timer-Setzwert kannst Du nach ICP- oder OC1A-Register schreiben (hängt vom Modus ab). Das Toggeln des Ausgangs kann der Timer gleich mit erledigen - damit sind die Ungenauigkeiten durch die Interruptreaktionszeit auch gleich beseitigt. Die Interruptroutine braucht dann nur noch die Pulse in einer internen Variablen (Register) zählen und nach 16 Impulsen den OC1B hochohmig schalten, damit ist der Burst draussen. Natürlich kannst Du auch den Timer1 anhalten.
Brauchst Du die SPI, dann kannst Du den Wandler auch an OC1A hängen und programmierst den Timer1 etwas anders.
Die Formeln für die Frequenzrechnung sind im Datenblatt für die Modi alle angegeben.

By the way: 3.6864MHz/256=14.4kHz - die hört man durchaus und das ist auch das piepsen, was Du erwähnt hast.