Problema com watchdog (resolvido)

Daquilo que eu sei sobre o watchdog se o activas depois no teu codigo tens de o ir resetando.No teu skectch tens:

 wdt_enable(WDTO_4S); //Função que ativa e altera o Watchdog

Que o activa e irá estoirar dentro de 4 segundos.Passado estes 4 segundos ele renicia.

delay(2000);

Logo aqui queimas 2 segundos e como na loop nao tens nada que depois possa resetar o watchdog ele vai estoirar e resetar nos proximos 2 segundos.
Para ires acalmando o "cao de guarda" antes de ele "morder" o reset tens de no teu codigo prever que teras de correr a funçao wdt_reset( ) antes do estoiro, caso contrario ira estar sempre a resetar reset apos reset que será o que te está a acontecer.
Do tipo se a funçao X que nao completou a tarefa por erro de comunicaçao com o pc vou reniciar o programa

#define wdt_reset ( ) asm volatile ("wdr")

Reset the watchdog timer. When the watchdog timer is enabled, a call to this instruction is required before the timer expires, otherwise a watchdog-initiated device reset will occur.

Aqui a uns tempos tambem li sobre esse problema entre o bootoader e o watchdog mas tambem li que ja foi resolvido algures ...
Algo deste tipo devera funcionar:

#include <avr/wdt.h>

void setup() {  
  wdt_enable(WDTO_500MS); // have the wdt reset the chip
  // if 500ms passes without a reset
}

void loop() {   
  wdt_reset(); // reset the wdt
}