Hi Rob,
it is possible to call a procedure from both the main program and from an interrupt alternately, but I would try to avoid that, it's... I'd call it dangerous.
As jal is not reentrant, you have to make absolutely sure, that no single part of any procedure is running twice in any case. (The only exception I know of are the multiplication/division functions which are safe to be called from an interrupt while running in the main program, but those are not seen as functions to the user anyway) That means, that if you use e.g. a print procedure inside the interrupt, you also have to disable interrupts each time you're using a similar print procedure in the main program. All decimal print procedures use the same background code, so in this sense, they're "the same procedure" and need to be surveyed not to run from both the main program and the interrupt at the same time.
And, you should compile with --no-variable-reuse, as the compiler is probably not aware of procedures being called from an interrupt.
Can be that you obeyed that rule by disabling interrupts when using I2C in the main program. But then, there's hardware involved. You need to make sure that the hardware is idle and in a reset, initialized state each time before enabling interrupts. I'm not so familiar with the I2C peripheral to decide if that's a problem. And, also all devices on the I2C bus need to be reset and initialized each time the interrupt is enabled.
I do prefer handing over the alarm to the main program via volatile flag bit.
Greets,
Kiste