SD.begin() causes SD card to pull 20mA in idle mode. Seem high?
You should look here and see if it helps. Basically:


Ensure that SD.begin() returns true because the card won't sleep if not properly initialized.
I don't know if it's been fixed but the SD library may still have a bug that prevents it from letting SD cards sleep. So try the SdFat library instead.
Try another SD card, from a reliable source.
Connect external pullups or use the Arduino's internal pull-ups with the MOSI, SCK and SS pins so they don't float.