interrupt starts at different times depending on upload time of program

What I would do is, in the ISR, open the shutter, and then set up a timer interrupt to fire the required amount of time later, and return. Fast and easy.

Later, when the timer interrupt happens, close the shutter, and disable the timer. Fast and easy.

No delay()s anywhere.