In the IAR MSP430 C/C++ Compiler Reference Guide, registers R4 to R11 are preserved registers, but none of these are preserved across a context switch, at least when using OS_Delay().
This caused a crash with some code recently. In a task, any local variables intended to be persistent across context switches were declared static, following the Salvo documentation, but even when this was the case the compiler would still store temporary values in registers, especially when optimization was turned on. The task called one function more than once, and on optimization level "High", the compiler decided to store the address of that function in R11 at the beginning of the task and then call the function using R11 later in the task. Because a context switch did not preserve R11, it ended up calling to the arbitrary address left in R11 once the scheduler returned to the task. It executed arbitrary code, and the system basically crashed and froze.
A workaround for this seems to be to set the optimization level to at most "Medium". In that case, the compiler retrieves the constant address of the function often enough that the value in R11 does not need to be persistent, but it isn't clear whether this behavior is guaranteed or accidental.