External interrupt fires to often when tone() is activated

Hello, I'm new to arduino development with a few hours under the belt yet. I'm have an irritating problem. I'm using attachInterrupt to read an external interrupt on pin 2 (Uno R3 board). If I attach a speaker to another pin and send a tone() to the speaker my CHANGE external interrupt fires to often, tests show the higher the frequency on tone the more interrupts fires.

When reading the pin I get HIGH several interrupts in a row, and then LOW several interrupt in a row. I can easily filter out the wrong ones isince it shouldn't fire HIGH -> HIGH ->HIGH. My question is why it does. I have some teories on my own but I'm leaving this to a correct answer...

I post some code, I have not executed exactly this code but it should demonstrate my problem.

/Linus

unsigned long m = 0;

volatile unsigned long startM = 0;
volatile unsigned long M = 0;
volatile unsigned long cnt = 0;

int ton = 0;

void setup() {
  Serial.begin(9600);
  pinMode(2, INPUT);
  pinMode(8, OUTPUT);
  attachInterrupt(0, change, CHANGE);
}

void change() {
  int reading;
  cnt++;

  reading = digitalRead(2);  
  if (reading == HIGH) {
    startM = micros();
  } else {
    M = micros() - startM;
  }
}

// the loop routine runs over and over again forever:
void loop() {

  // Do not fire interrupt when copying current reading
  noInterrupts();
  m = M;
  interrupts();


  // If I enable a tone the interrupt on pin
  // fires to often!?  
  if (ton == 0) {
     tone(8, 5000);
     ton = 1;
  }
    
 Serial.print("millis: "); 
 Serial.print(m);
 Serial.print(":");
 // cnt counts to fast if tone is enabled?!
 Serial.print(cnt);
 Serial.print("\n");

 delay(50);
}

What is connected to pin 2?

When reading the pin I get HIGH several interrupts in a row, and then LOW several interrupt in a row.

How do you know this?

In my real program I save the last state of the digitalRead(2) in the interrupt, and it fires HIGH multiple times in a row. If i just ignores those false fires (return) my program works...

Also, cnt which increases at every interrupt increases faster and faster the more frequency I give the tone, It's very visible in the debug output. It increases like 10 times faster at 5000hz.

On pin 2 I have a rc receiver, a channel will always output beetween 1000-2000 microseconds, I save this in M on the falling edge. If I start the tone I get readings well below this value, since startM resets when I get false interuppts.

I have a piezo buzzer from the standard arduino startkit as speaker, no resistor. This is how it's hooked up in the book and outputs the tone fine.

This is basically solved, it seems If I put a resistor in series with the buzzer I don't get any extra interrupt fires. I would need a scope to dig into this futher which I have one incoming.

Funny thing is, in Arduino starter projects book (Keyboard Instrument) example there is no resistor in series with the buzzer...