Trouble with Timer Counters - Am I being blind?

Hi Guys. Using Timer 2, simple CTC at 5kHz.

This DOES NOT work, gives me 2kHz

TCCR2A = 0;                               // Set entire TCCR1A register to 0
TCCR2B = 0;                               // Same for TCCR1B
TCNT2  = 0;                               // Initialize counter value to 0
OCR2A = 99;                               // Set compare match register for 5000 Hz increments. = 16000000 / (32 * 5000) - 1 (must be <256)
TCCR2B |= (1 << WGM21);                   // turn on CTC mode
TCCR2B |= (0 << CS22) | (1 << CS21) | (1 << CS20); // Set CS22, CS21 and CS20 bits for 32 prescaler
TIMSK2 |= (1 << OCIE2A);

BUT This does work:

TCCR2A = 0;
  TCCR2B = 0;
  TCNT2 = 0;
  // 5000 Hz (16000000/((24+1)*128))
  OCR2A = 24;
  TCCR2A |= (1 << WGM21);
  // Prescaler 128
  TCCR2B |= (1 << CS22) | (1 << CS20);
  TIMSK2 |= (1 << OCIE2A);

Can someone please point out where I am going wrong?

Full code I am using (For testing). Yes I know I am using Serial.print in an ISR - for testing.

void setup()
{
  Serial.begin(9600);                       // Start Serial

  noInterrupts();
  // Clear registers
  TCCR2A = 0;
  TCCR2B = 0;
  TCNT2 = 0;
  // 5000 Hz (16000000/((24+1)*128))
  OCR2A = 24;
  TCCR2A |= (1 << WGM21);
  // Prescaler 128
  TCCR2B |= (1 << CS22) | (1 << CS20);
  TIMSK2 |= (1 << OCIE2A);
  interrupts();
}
// End of Setup

// Start of ISR CTC Timer 2 at 5kHz
ISR(TIMER2_COMPA_vect)
{
  static int Count = 0;

  if (Count >= 5000)
  {
    Count = 0;

    volatile static unsigned long prev;

    Serial.print("\r\n");
    Serial.print((millis() - prev));
    prev = millis();
  }
  Count++;
}
// End of ISR CTC at 5kHz

void loop() {}

I have spotted my issue:

TCCR2B |= (1 << WGM21); // turn on CTC mode

Should be

TCCR2A |= (1 << WGM21); // turn on CTC mode