If you aren't sending any data back, what do you expect? It will happen to return what is in SPDR at the time. You have to change it in the ISR. Also you can't do Serial.print in an ISR, it takes too long.
Modified sketch, returns 0x42:
//Slave receiving data
#include <SPI.h>
void setup (void)
{
Serial.begin(115200);
// have to send on master in, *slave out*
pinMode(MISO, OUTPUT);
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode (SPI_MODE2);
SPI.setClockDivider(SPI_CLOCK_DIV64) ;
// turn on SPI in slave mode
SPCR |= _BV(SPE);
// turn on interrupts
SPCR |= _BV(SPIE);
} // end of setup
// SPI interrupt routine
ISR (SPI_STC_vect)
{
byte c = SPDR; // what we received from the master
SPDR = 0x42; // what to return to the master
} // end of ISR SPI_STC_vect
void loop (void)
{
} // end of loop
Logic analyzer confirms we got the 0x42 returned each time: