STM32F103 strange behavior
I may have figured this out. I have been using ST standard peripheral library to configure and use the SPI and DMA controllers (among others). I noticed that the SPI configuration registers were inconsistent depending on the declaration of variables at the start of main(). As an experiment I set the SPI config registers explicitly, eg as SPI1->CR1 = 0b0000100100110011. And everything works fine! I'm honestly still a bit confused as to why this might be a problem.
I have been setting up the ST code as such: Under main() I declare

SPI_InitTypeDef     SPI_InitStructure;


Then further on down the track I initialise the SPI peripheral 

SPI_I2S_DeInit(SPI1);
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;  //SPI_DataSize_8b; 
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;                     // SCK idle high
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;                    // second transition -&gt; SCK Idle high =&gt; capture on rising edge of clock
SPI_InitStructure.SPI_NSS = SPI_NSS_Hard;                       // SS must be low during entire SPI transaction
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;                
SPI_Init(SPI1, &amp;SPI_InitStructure);


But still there are shenanigans. Anyway, I will update if I make any more discoveries. I think I might abandon the ST peripheral library for initialisation, etc.
Thanks again