The ICSP pins are the SPI data lines for the Uno and Mega interface to the ethernet shield.
If I reuse the three SPI PINs (11,12 & 13) in the NFC shield, the NFC shield stops reading tags as soon as I select the Ethernet chip for the first time (even when I deselect it afterwards - PIN10.HIGH).
However if I use three different digital PINs for NFC shield (3,6 & 9), the NFC shield keeps working and reading tags after the selection of Ethernet chip. In fact I can read tags and then send the data to my server.
That is why I wonder if the bug of W5100 SPI selection is still there.
I am not certain about the NFC shield code. You need not manage the SPI SS pins for the w5100 nor the SD card. Those are managed by the low level read/write routines in the libraries. That is why you must disable the w5100 SS pin (digital 10). Once you do that, all SPI SS pins are HIGH, and you can select the proper SS pin to communicate with that device.
If the NFC shield does not manage its SS pin (digital 5), then that could be a problem, but not due to the SPI bus. That would be a code error in the NFC library. And that would also explain why it would work with different pins for the SPI data lines and not with the standard SPI bus.