How can V-USB screw up the built-in SPI of an ATmega328p?
I had a problem like that with USART and resolved it by changing the watch dog settings. 
As you know V-USB uses a watch dog and if you put extra time in one operation, the watch dog gets activated. Try deactivating the watch dog and if you see everything goes well, you can change the watch dog time or you can split the interfering code (the SD card codes in your case) into smaller parts and "Resetting" the watch dog between them. 
But don't forget to re-activate your watch dog after debugging as it is not recommended to use V-USB without that.