Interrupt from push button in a loop with a delay

Based-on your code sample I have integrated it as shown below. I am seeing a couple oddities. On first press it cycles through case 1 and case 2 together. Then it keeps cycling through case 3 repeatedly. It won't go to case 4 and jumps back to case 1. Any ideas?

#include <Wire.h>
#include <HPRGB.h>
#include <Bounce.h>

HPRGB ledShield;            //initialize
                            //interrupt
volatile boolean interrupted = false;
int count = 0;              //need a counter

void setup()
{                           //interrupt for button
  attachInterrupt(0, handler, RISING);
  Serial.begin(9600);       //used for debugging
  ledShield.begin();        //mA of each output
  ledShield.setCurrent(350,350,350);
  ledShield.setFreq(600);   //set freq
  ledShield.stopScript();   //stop check sequence
  ledShield.eepromWrite();  //writes settings
  delay(100);               //needs this per spec
}

void loop()
{
  if (interrupted)
  {
    Serial.println("HIGH");
    count = (count + 1) % 4;
    interrupted = false;
    delay(500);
  }
  
  switch (count)
  {
     case 1:
       Serial.println("Pressed 1");
       ledShield.goToRGB(0,0,255);
       delay(500);
       break;
       
     case 2:
       Serial.println("Pressed 2");
       while(interrupted == false){
         ledShield.goToRGB(0,0,255);
         delay(1000);
         ledShield.goToRGB(0,0,0);
         delay(1000);
       }
       break;
       
     case 3:
       Serial.println("Pressed 3");
       ledShield.goToRGB(255,0,0);
       delay(500);
       break;
       
     case 4:
        Serial.println("Pressed 4");
        while(interrupted == false){
         ledShield.goToRGB(255,0,0);
         delay(1000);
         ledShield.goToRGB(0,0,0);
         delay(1000);
       }
       break;
  }
}

void handler() 
{
  interrupted = true;
}