An associate of mine recently somehow bricked a couple of Arduino board. The issue was caused (we believe) by using a RAM-based array to store pin numbers that can be called in a FOR loop. Why use this complex method than setting multiple pins using the PORTX registers?
Well, the Arduino program was written with education in mind, and since the class had already covered FOR loops but had not yet covered PINX and PORTX, it was perhaps the easiest way to approach things.
The symptoms of bricking the Arduino in this instance were: not being able to use the Arduino IDE to upload a new sketch; the sketch itself didn't run; and the LED on pin 13 was just rapidly turning on and off as soon as power was connected to the board. Furthermore, hitting the reset button did nothing - the LED would just keep blinking.
This problem was fixed by using a standalone Wulfden Arduino program to re-upload a different sketch to the ATMega168 chip (I just used the Blink example).