I don't think PMT vs. CMT is particularly related to the issue of multiprocessor support. I don't see why it wouldn't be possible (though lots of hard work) to have one WIMP operating on each core, 'scheduling' tasks to run on that core, with only the two WIMPs communicating with each other, to cope with redraw and drag+drop events, and other messages.
You'd still have the problem of all the modules not being mp safe, let alone the bottleneck that RISC OS's blocking filecore would become. But you'd have all those problems under multicore PMT anyway.
How is state handled by the wimp anyway? The few wimp apps I've written have never made any assumptions about the csd, so I'm not sure how that's handled. Does the wimp restore csd on returning from the wimp_poll? If that's the case, then you could still shift processes between cores each time they poll, provided you make their state data available to the other core.