It has come to my attention I never posted a followup to this but I was actually able to solve this problem by shielding the wire going from the switch to the arduino. The switch's wire was about 2 to 3 inches long and I wrapped aluminum foil around it, which shielded the signal from what I suspected was EMI induced by the switching converters.
Not a direct answer to your questions, but after reading your code I
would like to give some comments:
You are not using “circular buffers”, you are double-buffering.
If you used a circular buffer, you would not need two of them.
recordingEnded is always false and thus serves no purpose.
When writing and change_buffer are both true, you should transmit
You can't use delay() or timer based tone() function in interrupt handler. Set a flag in interrupt and run the code in loop() conditionally based on the flag state. Do not forget to have the flag variable volatile.