In theory I should never hear a beep, but I do.
Most system timers do not have 1ms precision like that. For instance, on Windows, the system clock has ~15ms precision, IIRC.
Also, even with a 1ms precision, when the 1st timer has elapsed and generated its notification, by the time that notification is actually processed by your code and stops the 2nd timer, the 2nd timer may have already elapsed and generated its notification, which will still get processed. Stopping a timer does not kill off notifications that have already been generated.
Is this to be expected?
Yes.