Arduino as slave only receiving 1st and last byte

I have one Atmega328 as a master and another 328 configured as slave. I basically have the following code:

// Master
void loop(){
      spi_select_slave( 10 );
      spi_write_byte( 1 );
      spi_write_byte( 2 );
      spi_write_byte( 3 );
      spi_write_byte( 4 );
      spi_write_byte( 5 );
      spi_deselect_slave( 10 );
      delay( 5000 );
}

// Slave
void loop(){
    unsigned char receivedByte = spi_read_byte();
    Serial.println( receivedByte, DEC );
}

The weird thing is I only get the first and last byte, like so:

1
5
1
5
1
5
...

If I understand the datasheet correctly, the 328 shouldn't need to do a /SS & SS for each byte. And I'm certain the spi functions are behaving correctly. The spi functions work great for communicating with a SC16IS740 in slave mode.

Is this normal behavior for an Atmega 328 configured in slave mode?

I’m still having issues, but here’s an update. I found that if I send a large amount of data, say 200 bytes each one incrementing, then the slave will receive some bytes in between the first and last. But only a few of them. They are always the same given the same input set. No obvious pattern.

Currently this code works:

void lopp(){
      spi_select_slave( 10 );
      for( int i=0; i<10; ++i )
      {
            spi_write_byte( i );
            delay( 3 );
      }
      spi_deselect_slave( 10 );
      delay( 2000 );
}

If I make the delay inside the loop to anything smaller than 3 then i start loosing numbers. This is true regardless of how fast I configure the SPI clock speed. I must be missing something stupid somewhere.

Ok, this may sound stupid, but it appears all my troubles were caused by the time it takes to call Serial.println(), which from my testing shows ~3 ms. So what was happening was that the master was transmitting all the data, but the slave was catching only bits and pieces whenever it wasn't executing the Serial.println function.