Here is a link to Bill Porters Easy Transfer page
I found using his library simplified communications incredibly for me between Arduinos. The library is lightweight, easy to implement, very easy to use. You simply define the variables you want to send on both ends, and the library does the rest, including CRC checksums.
While I am certain that one could do the same using SPI, I found the above to be very robust, fast enough for my needs, and much easier to implement. Perhaps smeezekitty can extend Easy Transfer to use SPI the same way that Kumy extended Easy Transfer to I2
One aspect of I2
C I really like is that one does not have to sacrifice more than two pins from the MCU, regardless of how many devices are on the bus. Yes, one has to pay attention to the pull-up resistors, especially in fast mode, but it's nothing too difficult to implement. With SPI, one always has to pay attention to the state of the SS pin(s) and the minimum MCU pin count is 4 for bi-directional usage.
No doubt, you can move a lot more data via SPI and it's a bit more robust than I2
C in terms of the maximum length it's good for. However, for robust communications, I still rely on RS485 and serial RX and TX. Maybe not the fastest implementation, but relatively easy to debug on both ends. I guess it comes down to how much data has to be moved.