Delay controlled relay sketch issues

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