Intermittently the w5100 SPI is trashing up the SPI bus unless you disable it during your SD tests. Add the line below to your setup function.
Serial.print("Initializing SD card...");
// make sure that the default chip select pin is set to
// output, even if you don't use it:
pinMode(10, OUTPUT);
// Add this line. It disables the w5100 SPI
digitalWrite(10, HIGH);
// now SD.begin()
How does that do?