Je connais 2 raisons qui donnerait des temps aléatoires.

1) soft , les interruptions étant actives des éléments externes quelqu'ils soinent perturbent la base de temps, l'int RBIF par exemple autorisée alors que les pins sont en l'air ferait ce genre de problème.

2) hard, des capas trop faibles sur le quartz filtre mal les harmoniques , lesquels arrivent a passer parfois dans des "extra-cycles" modifiant la fréquence de l'horloge.

Quant aux remarques sur les calculs elles sont justifiées et le calcul devrait être fait dans le main() une fois pour toute , surtout si l'on fait une boucle de sound et que l'on ne veut pas faire un son haché.
Mais le calcul n'explique pas la variation de durée...