Es obvio que algo de imprecisión se comete por esas cuestiones.
Si tu sistema requiere una temporización estricta tendrías que llevar la cuenta exacta de cuantos ciclos consumes durante el tratamiento de la interrupción y ajustar la configuración del timer para cuadrar los tiempos.
En todo esto influye también el lenguaje que estés usando.Siempre será más óptimo usar ensamblador.En el caso de que tu programa no use más interrupciones que la del temporizador,te puedes ahorrar el testeo de flags.
Para paliar ese retraso por el tiempo de proceso en la rutina de interrupción se puede poner la recarga del timer en primer lugar,así,nada más producirse la interrupción y el salto a su correspondiente rutina,lo primero que harás será volver a poner a correr al temporizador,habiendo perdido un ciclo máquina si no me equivoco (el del salto).Eso,en tu caso supondría un error de 1 us cada 4 ms,es decir,1 segundo -> 250 interrupciones -> 250 us de error (retraso) en cada segundo,que se irían acumulando y sumándose tras cada segundo (en una hora ya sería casi 1 segundo de error acumulado).
Con esto de cargar el timer como primera acción hay que tener cuidado,ya que hay que hacerlo sólo si estas seguro de que no va a provocar que te inhiba una proxima interrupción por seguir dentro de la rutina de tratamiento de la misma.
Rizando más el rizo...
De todo esto tiene la culpa el que tengamos que recargar el timer.Si no tuvieramos que hacerlo (dejar al timer dar vueltas él solito),el timer interrumpiría de forma continua cada 256 cuentas,invirtiendo para ello de forma exacta el mismo intervalo de tiempo (siempre y cuando no esté inhibido).Esto nos vale pa echar un par de números:
T = (256 - 0) * 16 * 4 / Fosc
=> T * Fosc = 256 * 64
=> T * Fosc = 16384
Seguimos necesitando que T sea divisor exacto de 1 segundo.Estableciéndolo a un valor concreto,obtendríamos un valor concreto para la frecuencia del cristal.Si le damos a T el valor 1 (una interrupción cada segundo),obtenemos un valor para el cristal de 16384 Hz.Si no me equivoco,ese es un valor comercial muy querido por los amantes de los relojes en tiempo real