You debouncing code for the button is wrong, you should do something like:
byte state = digitalRead(buttonPin);
if ((state != buttonState) && (millis() - buttonChange >= buttonDebounce))
{
buttonState = state;
buttonChange = millis();
}
//Do buttonState related stuff here