I see that I'm way behind the times on boost::thread - I hadn't realized that cancellation had been added to it.
So, I'll rephrase the question - from the point of view of boost::statechart, is there a reason to prefer cancellation over some other means of stopping a thread, like calling a stop() function and then join()?