This is the issue I was warning about using delta times.
I think you should do scheduledTime = scheduledTime + period, instead of NOW + period.

This way, the next scheduled time is the correct period away from now.  You may need to figure out what happens when old scheduled time + period has already passed by -- then maybe fallback to NOW + period, or just fire right away.. or on a multiple of the original period.. many options.