Serial Output and Counter issue

I'm having an issue where my count goes up to 3, but then goes down to two and back up to three and just keeps doing it. To explain: This code is meant to blink slowly an LED 3 times and then blink fast 3 times and then return back to slow blink. Its clearly from a public domain example but I digress. The Serial.println is only so I can monitor the counter, it will be deleted from the final code when I get this working but I can't see my error.

/*
  Blink without Delay

  Turns on and off a light emitting diode (LED) connected to a digital pin,
  without using the delay() function. This means that other code can run at the
  same time without being interrupted by the LED code.

  The circuit:
  - Use the onboard LED.
  - Note: Most Arduinos have an on-board LED you can control. On the UNO, MEGA
    and ZERO it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN
    is set to the correct LED pin independent of which board is used.
    If you want to know what pin the on-board LED is connected to on your
    Arduino model, check the Technical Specs of your board at:
    https://www.arduino.cc/en/Main/Products

  created 2005
  by David A. Mellis
  modified 8 Feb 2010
  by Paul Stoffregen
  modified 11 Nov 2013
  by Scott Fitzgerald
  modified 9 Jan 2017
  by Arturo Guadalupi

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
*/

// constants won't change. Used here to set a pin number:
const int ledPin =  13;// the number of the LED pin

// Variables will change:
int ledState = LOW;             // ledState used to set the LED
int counter = 0;                  //added 4/18/2020

// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0;        // will store last time LED was updated

// constants won't change:
const long interval = 1000;       // interval at which to blink (milliseconds)
const long interval2 = 1500;     //added 4/18/2020

void setup() {
  // set the digital pin as output:
  pinMode(ledPin, OUTPUT); 
  Serial.println (counter);         //added 4/18/2020
}

void loop() {
  // here is where you'd put code that needs to be running all the time.

  // check to see if it's time to blink the LED; that is, if the difference
  // between the current time and last time you blinked the LED is bigger than
  // the interval at which you want to blink the LED.
  Serial.begin(9600);                                  // added 4/18/2020
  unsigned long currentMillis = millis();
    Serial.println (counter);                          //added 4/18/2020
    Serial.println ("Spacer for Output");        //added 4/18/2020
    delay(100);                                          // added 4/18/2020

  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
      counter++;
    
    }

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
  }  //everything below this point was added 4/18/2020
  else if (counter == 3 && currentMillis - previousMillis >=interval2){
    previousMillis = currentMillis;
      if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
      counter--;
      Serial.println(counter);
    }

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
  }

}

yes its sloppy I know but...hey 6 days coding...

I think you are looking at this in the wrong direction. Rather than having two intervals, make your delay a variable and change the duration based on your counter. You also need to but Serial.begin() in your setup() not in the loop()

/*
  Blink without Delay

  Turns on and off a light emitting diode (LED) connected to a digital pin,
  without using the delay() function. This means that other code can run at the
  same time without being interrupted by the LED code.

  The circuit:
  - Use the onboard LED.
  - Note: Most Arduinos have an on-board LED you can control. On the UNO, MEGA
    and ZERO it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN
    is set to the correct LED pin independent of which board is used.
    If you want to know what pin the on-board LED is connected to on your
    Arduino model, check the Technical Specs of your board at:
    https://www.arduino.cc/en/Main/Products

  created 2005
  by David A. Mellis
  modified 8 Feb 2010
  by Paul Stoffregen
  modified 11 Nov 2013
  by Scott Fitzgerald
  modified 9 Jan 2017
  by Arturo Guadalupi

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
*/

// constants won't change. Used here to set a pin number:
const int ledPin =  13;// the number of the LED pin

// Variables will change:
int ledState = LOW;             // ledState used to set the LED
int counter = 0;                  //added 4/18/2020

// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0;        // will store last time LED was updated

// constants won't change:
const unsigned long intervalSlow = 1000;       // interval at which to blink (milliseconds)
const unsigned long intervalFast = 1500;     //added 4/18/2020
unsigned long interval;

void setup() {
  Serial.begin(9600);                                  // added 4/18/2020
  // set the digital pin as output:
  pinMode(ledPin, OUTPUT);
  counter = 0;
  interval = intervalSlow;
  Serial.println(counter);         //added 4/18/2020
  Serial.println(interval);         //added 4/18/2020
}

void loop() {
  // here is where you'd put code that needs to be running all the time.

  // check to see if it's time to blink the LED; that is, if the difference
  // between the current time and last time you blinked the LED is bigger than
  // the interval at which you want to blink the LED.
  unsigned long currentMillis = millis();
  Serial.println(counter);                          //added 4/18/2020
  Serial.println ("Spacer for Output");        //added 4/18/2020
  delay(100);                                          // added 4/18/2020

  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
      counter++;
    }
    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
  }

  if (counter == 3) {
    // reset counter and swap interval
    counter = 0;
    if ( interval == intervalSlow ) {
      interval = intervalFast;
    }
    else {
      interval = intervalSlow;
    }
  }
}

Thank you,

I am still trying to figure the ins and outs. I was thinking I needed to count down, not reset. This code is going into a large...mess that will be controlling leds in plastic models. This is the blinking routine for running lights. But it definitely is running my counter so it should be working when I plug it back into my board and master program.