You are not debouncing the button in software, so it had better be debounced in hardware!
Your interrupt routine is calling Jog which has the very while loop that is blocking -
absolute no-no, interrupt routine must simply exit, nothing else can happen till it does.
You communicate between interrupt routine and the rest of the program with variables
declared volatile. Interrupts are asynchronous, and block other interrupts until you
return from the ISR.
You don't need an interrupt to read a button, interrupts are for fast urgent events,
not something on a human timescale.
Also this is amusing:
jogging == true ? jogging = false : jogging = true; // Toggle jog mode
when you realise there's a logical not operator:
jogging = !jogging ;