"The CSD is a global, shared among all processes. Much like environment variables, the sprite context, the VDU pipeline, and dozens of other things."
This is true, and the reason most programs don't rely on them except, possibly, to assume that they won't change between calls to Poll. If each program had it's own CSD, sprite context, etc. they wouldn't see a difference. Environment variables are another case; they should be shared but it probably wouldn't break anything to allow changes between Poll calls, but if that turned out to be the case, the shared environment could be copied on each Poll.
A lot can be achieved by allowing programs that are aware of the multi-processing capability of the OS to carry on working while waiting for a poll response, while avoiding doing anything that would affect other, more traditional programs.
ROLF allows processes to detatch from the Wimp polling process and be signalled when an event that it should take care of has occurred, and also to keep working while waiting for the Wimp to re-introduce the process into the traditional CMT environment.