John,

One possiblility ...

Your MainLoop is talking to the RTC on every loop to check the time.
If an Alarm happens while the mainloop is using I2CWRITE, and it tries to use I2CWRITE to clear...