Hi Myke
it reminds a similar problem that i had with KL15.
I have not the code on this PC,and i'm not shure at all that the situations are related.
I wrote my own routine for transmitting n bytes ,accessing directly to SPI register ,i had to use a GPIO pin as SPI CS,because that SPI (SPI0)was not able to keep CS costantly low during transfer of multiple bytes,and this was requested by the external peripheral.The original CS pin was left free.
At first attempts,after copied the last byte in the data register i checked SPI1_S & SPI_S_SPTEF_MASK ,but doing that is simply check that the output buffer is free, once it has moved the byte in the output shift register,but the transmission on pin could be still running,
the code at that point was faster than the shifting mechanism,so i issued another transmission too early,and thelast byte was truncated.
The workaround that i did was ,once the last byte was launched ,to check the original CS pin level as it was a GPIO:
while(!(GPIOD_PDIR & 0x10));
because differently than SPTEF ,the CS pin goes inactive only when all the bits are physically shifted out on pin.
Probaly it was not the better way to do what i needed,but this is the only thing that i can remember that could have something to do with your problem
Good luck
Diego