First of all, you can fix the old-style Ethernet shields so that the Ethernet chip doesn't interfere with use of SPI port devices on other shields. (Or with things like the adafruit "MicroSD card breakout board" riding on a prototype shield of some type. I have tested that and it works a treat with 8 GByte SDHC cards using the SdFat library)
However...
Regardless of what certain blogs and other "helpful" web pages tell you, it is not safe to use the SD connector on the old Ethernet shield with Arduino boards like the Duemilanove without some non-trivial surgery.
Other than the fact that the SD interface does not use SPI (that can be changed by a few cuts and jumps), the big deal for me is that the 5 Volt Arduino bus signals are applied directly to the SD card connector. SD cards are simply not rated for 5 Volt operation, and I would not recommend trying to use them that way. (If you have some kind of Arduino spin-off that is running on 3.3 Volts, it might be worth a try to see if a couple of cut/jump mods can make the SD card work, but I don't have any kind of beast like that, so I couldn't say whether it's worth it.)
Anyhow, to be able to use the Ethernet Shield with other SPI devices, hare's the deal:
On the Wiznet site http://www.wiznet.co.kr/en/, there is an errata sheet and an application note that shows a way to work around the W5100 SPI bug. (Attention Wiznet wonks: It's a real bug, worthy of an errata sheet, not a feature to be described in an app note type of document.) You can refer to the schematic of the latest Ethernet shield to see how it is done on the new version.
For the old version of the Ethernet Shield. you don't have to change anything in the Arduino Ethernet library or your source code that uses that library (or anything else) if you do the following mod on the Ethernet Shield.
Connect the input of a logic inverter to the SPI "SS" signal coming into the Ethernet Shield. Connect the output of the inverter to the "SEN" pin on the '5100. (That's pad number 2 of the "Prog" pads).
Now, when the Ethernet SPI interface is not selected ("SS" is high), the SEN signal on the '5100 is pulled low. This keeps the '5100 from corrupting data on the MISO pin back to the Arduino. The Ethernet library functions do this automatically. You don't have to do anything special with Arduino pin 10.
A single section of a CD4049 or a 74HC4049 hex inverter will do the trick. At least, it does for me. I used a little dab of hot-melt glue to attach a CD4049 DIP chip with its legs in the air (affectionately known as the "dead bug" method of breadboarding) to the underside of the Ethernet Shield. One of the inverters is used as I described above.
Note that I connected the power and ground of the hex inverter chip to Arduino +3.3 Volts (not +5 volts) and GND signals, respectively, and I connected the five unused inverter inputs to GND because you shouldn't leave CMOS inputs floating.
Bottom line: The existing Ethernet library functions take care of wiggling Arduino digital pin 10 (which is used as the Ethernet Chip select). This fix is hardware-only. You don't have to do anything in software. This fix still does not help you use the SD card slot on the old Ethernet shield, but it does let you use other SPI devices.
Regards,
Dave