Why do you care, and ... what do you expect to happen?
I'm working on a more specialised tone library and thought I'd use Arduino Tone as a base, or at least for guidance. I wanted to fully understand how it worked and in attempting to do so, my question arose. I just wanted to make sure I hadn't overlooked something in the datasheet.
As you say, it's not likely to be noticeable for just generating music. However, if you wanted to use the technique for a different purpose, such as generating a frequency pulse a fairly precise time close to a trigger for a specific duration, it might be something that you should be aware of.
I think the problem could mostly be solved by setting all the CS3x bits to 0 just before disabling the interrupt in the timer ISR. This would stop the timer's counter. Since being in CTC mode would reset the counter to 0 at the same time as generating the interrupt, the counter would be stopped at (or close to) 0. The tone() function already sets the bits for the proper prescaler (/1 or /64), so the counter would start running again from 0 at that point. You would probably also have to stop the timer's counter and clear it manually in noTone().
Because I'm just using it for music, like tone() is intended, I'm probably not going to worry about it. Again, I just wanted to make sure I understand the code and datasheet correctly.
What about the last cycle of the previous tone?
As long as the previous tone isn't halted early by noTone() or by starting a new tone before the previous one completes, the last cycle would be the proper length because the proper number of counts would have occurred between interrupts. Whether that last cycle was actually silence would depend if the duration count started out odd or even. You could round the duration count to always be odd or even if you desired.
Thanks for taking the time to look into this and reply.