But if you put the hardware slave select pin high when you are using the SPI the Atmega hardware will immediately jump to slave mode and stop transmiting data.
Not if that pin is an output pin. The Arduino SPI hardware will be in Master mode as long as the SS pin is an output pin, but the ATmega SPI hardware doesn't control it and it doesn't care whether you make it go high or low for any purpose. (If you make the SS pin an input, then the ATmega SPI hardware will automatically switch to Slave mode if some external device connected to that pin asserts a logic low level, but it stays in Master mode as long as the pin is in output mode. Really)
Lots of hardware (like the Arduino Ethernet card) also uses the SS pin for the SPI slave device "chip select" signal, but in fact you can use any Arduino output pin as a "chip select" and the various libraries will need to manipulate the "chip select" pin as needed. With version 5 of the Arduino Ethernet card (the one with the microSD socket) you can use the Ethernet library to access Ethernet stuff (uses SS pin for Ethernet device "chip select"---that's pin 10 on '328 Arduino boards) and you use the SD library to access the SD (uses Arduino pin 4 for the SD "chip select"). Both can have active devices at the same time. (Only one will be active on the SPI bus for a given instruction, but Ethernet and SD access can occur within the same sketch at different times.)
When your program does Ethernet stuff, the SPI port manipulates the SPI signals MISO, MOSI and SCK, and the Ethernet library access functions wiggles the SS pin (Arduino Pin 10 for ATmega328p chips) as required to enable and disable the WIznet Ethernet controller to send/receive Arduino data on the SPI port. The library functions leave the SS pin high when it is not accessing the Ethernet device.
When your program does SD accesses, the SPI port does it stuff and the SD library access functions wiggle pin 4 as required. The library functions leave pin 4 high when it is not accessing the SD device.
So: You can have more than one device "active," at the same time, and the device "chip select" determines which device is "on the bus" at a given time.
Regardless of which pin you are going to use as the slave "chip select" pin, your sketch (or any SPI device library you are using) must manipulate the slave "chip select" pin as needed. (And for sanity's sake, should leave the SS pin as an output.)
At any rate, a decent SPI library will initialize the "SS" pin as an output, regardless of what pin you are using as the slave"chip select." See Footnote.
Sometimes people specifically put an instruction to set the pin mode to OUTPUT for the SS in their sketch (and sometimes they also set the output bit high). This doesn't hurt, but libraries like the Arduino Ethernet library and the Arduino SD library and the SdFat library (and, in fact, any reasonable library) will do this for you when you use the library's device initialization function.
My definition of "decent" SPI library requires that the library let you specify some pin other than the SPI port hardware "SS" pin to be the slave device "chip select" pin. My definition of a "decent" library requires that the library initialize and manipulate them during SPI port operations from the library API without making the user sketch work directly on the pins or the SPI hardware registers.
Of course, you don't have
to use a library at all; you can put the hardware port access directly into your sketch or into some functions that you write along with your sketch. For accessing SD memory cards I personally use the SdFat library that I downloaded from http://code.google.com/p/sdfatlib/downloads/list
(sdfatlib20101010.zip is the latest one.)