Using the SD card AND the Ethernet on sheild causes issues

They will both work together. Try this sketch. It disables the SD while it starts the w5100, then starts the SD card. Does this show "Starting ethernet...192.168.2.2" and "Starting SD...ok"?

#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>

byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,2,2);

void setup() {
  Serial.begin(9600);

  // disable SD SPI
  pinMode(4,OUTPUT);
  digitalWrite(4,HIGH);

  // Start ethernet
  Serial.print(F("Starting ethernet..."));
  Ethernet.begin(mac, ip);
  digitalWrite(10,HIGH);
  Serial.println(Ethernet.localIP());

  // starting SD
  Serial.print(F("Starting SD..."));
  if(SD.begin(4) == 0) Serial.println(F("failed"));
  else Serial.println(F("ok"));

  delay(2000);

  Serial.println(F("Ready"));
}

void loop() {
}

The only bug I have discovered is the Ethernet.begin() call returns with the w5100 SPI active. That is a bug. It should return with the SPI disabled, as do all other ethernet functions. That is why the "digitalWrite(10,HIGH)" after the Ethernet begin() call. After that, all other functions of both devices work fine. There is no need to manipulate the slave selects after the setup function.