Timing issue with button press

yep - try something like

unsigned long last_change = -TIMER_MS;

for the initialization