Se me queda "colgado" dentro de una función

Hice un código que lee un pulsador con antirrebote, en donde si el botón es pulsado 2 veces en menos de 2,5 segundos, se enciende un led y suena un buzzer 3 veces, pero si en esos 2,5 segundos solo es pulsado una vez y luego de esto pasan 2,5 segundos más sin ningún nuevo pulsado, todo vuelve a cero.
Es ahí donde aparece mi problema se queda en un bucle infinito ejecutando la función: "void borrado ()".
No se como hacer para que vuelva a ejecutarse el void loop.
Gracias

const int pulsador = 2;
const int led = 13;
const int buzz=5;
int lectura = 0, lecturaAnterior = 0;
const int tiemposis = 2500;
const int tiempoborrado = 5000;
unsigned long disparo =0;
unsigned long flancoSubida = 0;
int tiempoAntirebote = 50, contador = 0;

void setup() {
  pinMode(pulsador, INPUT);
  pinMode(led, OUTPUT);  
  Serial.begin (9600);

}
/*void(* resetFunc) (void) = 0;*/
void loop() {
  
            lectura = digitalRead(pulsador);
            if (lectura == HIGH && lecturaAnterior == LOW && (millis() - flancoSubida) > tiempoAntirebote ){    
          
              disparo = millis ();
              contador++;
              Serial.println (contador);
          
                  if (contador == 2 && (millis() - disparo) < tiemposis){
          
                    digitalWrite (led,1);
                    delay (30);
                    tone (buzz,2000);
                    delay (30);

                    digitalWrite (led,0);
                    delay (30);
                    noTone (buzz);
                    delay (30);

                    digitalWrite (led,1);
                    delay (30);
                    tone (buzz,1000);
                    delay (30);

                    digitalWrite (led,0);
                    delay (30);
                    noTone (buzz);
                    delay (30);

                    digitalWrite (led,1);
                    delay (30);
                    tone (buzz,2000);
                    delay (30);

                    digitalWrite (led,0);
                    delay (30);
                    noTone (buzz);
                    delay (30);

                    
                    contador = 0;
                    }
                    
                   flancoSubida = millis();         
              }
          
                  if (contador < 2 && (millis() - disparo) > tiempoborrado){
              
                      borrado ();
                    }
                  lecturaAnterior = lectura;  
          }

void borrado (){
        contador = 0;
        disparo = 0;
        lectura = 0;
        lecturaAnterior = 0;
        Serial.println ("Contador borrado");
        Serial.println ("Else activado");
        
        }
if (contador < 2 && (millis() - disparo) > tiempoborrado) {

Si analizas este condicional veras que una vez que haces un borrado se va a cumplir siempre, añadele para que compare si anteriormente ha sido pulsado

if (contador < 2 && (millis() - disparo) > tiempoborrado && lecturaAnterior == 1) {

Yo he reubicado tus cosas para que sean mas claras.

const int pulsador = 2;
const int led = 13;
const int buzz=5;
int lectura             = 0, 
    lecturaAnterior     = 0;
const int tiemposis     = 2500;
const int tiempoborrado = 5000;
unsigned long disparo   = 0;
unsigned long flancoSubida = 0;
int tiempoAntirebote    = 50, 
    contador            =  0;

void setup() {
  pinMode(pulsador, INPUT);
  pinMode(led, OUTPUT); 
  Serial.begin (9600);

}
/*void(* resetFunc) (void) = 0;*/
void loop() {
 
  lectura = digitalRead(pulsador);
  if (lectura && !lecturaAnterior) 
      if ((millis() - flancoSubida) > tiempoAntirebote ){   
          disparo = millis ();
          contador++;
          Serial.println (contador);
          if (contador < 2)
              if (millis() - disparo) > tiempoborrado){
                  borrado ();
              }
          }
          if (contador == 2) {
              if (millis() - disparo) < tiemposis){
                  ledBuzzer();
                  contador = 0;
              }
          }
          flancoSubida = millis();         
      }
  }
  lecturaAnterior = lectura; 
}

void borrado (){
  contador        = 0;
  disparo         = 0;
  lectura         = 0;
  lecturaAnterior = 0;
  Serial.println ("Contador borrado");
  Serial.println ("Else activado");
}

void ledBuzzer() {
  digitalWrite(led,1);
  delay (30);
  tone (buzz, 2000);
  delay (30);
  
  digitalWrite(led,0);
  delay (30);
  noTone (buzz);
  delay (30);
  
  digitalWrite(led,1);
  delay (30);
  tone (buzz, 1000);
  delay (30);
  
  digitalWrite(led,0);
  delay (30);
  noTone (buzz);
  delay (30);
  
  digitalWrite(led,1);
  delay (30);
  tone (buzz, 2000);
  delay (30);
  
  digitalWrite(led,0);
  delay (30);
  noTone (buzz);
  delay (30);
 }

Luego hablas de cosas que ocurren dentro de los 2.5 segundos y después, pero en tu comparación tienes 5 segundos y no 2.5.
El umbral de cambio debiera ser 2.5 y pasados dicho valor entonces deberías poner a 0 todo.
Otra forma de resolverlo es usando impresiones en el monitor serie. Ayúdate siempre con ellas para saber que estas haciendo y que no!!