Ich habe mal so etwas ähnliches erlebt. Ich habe es darauf geschoben, dass ich neben dem Programmieradapter (AVRISP MKII) noch etwas anderes an den SPIPorts angeschlossen habe. Obwohl es nichts war, was man nicht an einen µC hängen sollte (Ich glaube es waren LEDs mit Vorsiderstand gegen Vcc), hat es in Verbindung mit dem Programmer den µC zerstört. Das konnte ich aber abklemmen und danach ging es. Hat mich 3 µCs gekostet und trat nur sporadisch auf (etwa alle 10mal flashen), aber mir konnte auch niemand sagen, warum es jetzt passiert ist.
Am Code kann es eigentlich nicht liegen. Du könntest höchstens mal versuchen, die Startup Time in den Fusebits zu erhöhen um dem Programmer mehr Zeit zu geben, "abzuschalten". Vielleicht konfigurierst Du Deine SPI Ports sehr früh im Programm als Ausgänge mit Wert 0. Wenn der Programmer dann noch Strom liefert, könnte es DIr die Ports zerschießen. Das war meine Vermutung damals. Ist aber nur ein Schuß ins Blaue.
Würde die Lösung auch gerne wissen.
Gruß