Was ich so auf den ersten Blick sehe (also kein Anspruch auf Vollständigkeit):

1)
Code:
uint16_t MSB = 0b100000000000000; // Letzte bit
Für solche Konstanten die binäre Schreibweise zu verwenden, ist meist keine so gute Idee. Bei den vielen Nullen verzählt man sich schon mal, und genau das hast du auch.

2)
Code:
if(SPI_CLK_PB2 & (1<<SPI_CLK_PB2))


if(!(SPI_SS_PB1 & (1<<SPI_SS_PB1)))
Diese if-Bedingungen machen überhaupt keinen Sinn, und sind immer false.

3)
Code:
MSB <<=1;
Falsche Richtung.

4)
Wo ist der Rest von SPI_Write_Word?