There are a few conflicts here. You can't use digital pin 4 for anything but the SD SPI Slave Select. That pin is taken. When you set pin 4 LOW, you are enabling the SD SPI interface. Can't do that.
edit: You can do that, as you have proven, but you can't do that and use the SPI bus to communicate with the w5100.
Use the proper Ethernet.begin() format.
Ethernet.begin(mac, ip, dns, gateway, subnet);
// or if you do not use dns in your code, you can use the gateway for the dns server ip
Ethernet.begin(mac, ip, gateway, gateway, subnet);
edit: If you are using v0023 or older, the format should be
Ethernet.begin(mac, ip, subnet , gateway);