I fixed the SPI0_SS_BIT issue with the MEGA (and all SPI usage in general, when trying to move the SS bit to a different pin).
What happens is that the SS pin is used by AVR only when acting as a SLAVE, AND also when it is setting the SPCR register (SPI working mode definition register). SS needs to be high before setting AVR in SPI master mode by setting SPCR bit 4 to HIGH. If this pin is not high, then it doesn't go into Master mode. Changing the following line in spi.h:
PORTB |= SPI0_SS_BIT; PORTB &= ~(SPI0_SCLK_BIT|SPI0_MOSI_BIT);\
to
PORTB |= SPI0_SS_BIT | BIT0; PORTB &= ~(SPI0_SCLK_BIT|SPI0_MOSI_BIT);\
solves the problem and now the Arduino Ethernet Shield can work with the MEGA board by moving only 3 pins, not 4.
The only drawback is that pin SS (IO port 53) will remain high, but any setting using digitalWrite() after Ethernet.begin() will change the value to a desired value, if you ever need to use this port.
I will edit my original hack posting to reflect this new change, that makes the hack simpler to perform.