Inicio codigo inesperado (SOLUCIONADO)

A ver de este modo

const byte ledpin       = 13;

unsigned long Dt        = 1000;
unsigned long ConT      = 3000;
unsigned long intervalo = 1000;
unsigned long t         = 0;
unsigned long palabra   = 0;
unsigned long tiempoP   = 0;
unsigned long timeMillis;
bool ledestado          = LOW;

void setup()  {
  Serial.begin(9600);
  pinMode(ledpin, OUTPUT);
}

void loop(){  
  
  timeMillis = millis();

  if (timeMillis - t > Dt) {
      Serial.print("Tiempo:    ");
      Serial.println(timeMillis);  
      t = timeMillis;
  }

  if (timeMillis - tiempoP >= intervalo) {
      tiempoP = timeMillis;
      if (ledestado == LOW)
          ledestado = HIGH;
      else 
          ledestado = LOW;
      digitalWrite(ledpin, ledestado);
  }

  if (timeMillis - palabra >= ConT) {
      palabra = timeMillis;
      Serial.println("SE CUMPLE LOS 3 SEG.");
  }
}

No hace falta que en cada consulta uses una variable para llevar el estado de millis(), solo cambia microsegundos.
Tus procesos no son tan precisos como para tomarte ese cuuidado.
Mira el resto de los cambios.
En lo ultimo trabajabas con ConT y no con palabra.