Ethernet.begin() only works with SD Card removed - why?
According to the Arduino Ethernet Shield page:


  Note that because the W5100 and SD card share the SPI bus, only one
  can be active at a time. If you are using both peripherals in your
  program, this should be taken care of by the corresponding libraries.
  If you're not using one of the peripherals in your program, however,
  you'll need to explicitly deselect it. To do this with the SD card,
  set pin 4 as an output and write a high to it. For the W5100, set
  digital pin 10 as a high output.


And if you're using the first version of the board:


  The original revision of the shield contained a full-size SD card
  slot; this is not supported.