My guess is that your enormously long interrupt routine is the problem.
Agreed. That, and the fact that you re-enable interrupts in the middle of your ISR.
Some of the comments in there are plain stupid. Some of the data types are, too.
// keep a running total of the last 10 IBI values
word runningTotal = 0; // clear the runningTotal variable
Do you KNOW what size a word is? If not, don't use it. This isn't Microsoft, and you won't be fired for not using a stupid type they invented. You are not clearing the variable. You are assigning it an initial value.