Currently, the task scheduler is not exception-safe. This is something we are currently fixing. Until then, method execute() in a task, or methods of a loop body object should not let exceptions escape.
The rest of your questions need more specific examples/code fragments to answer. In general, I'd be suspicious if destruction of an object must be protected by a mutex, because any other thread waiting to access said object is going to see it in an invalid state. However, if the destructor invokes non-thread-safe operations, then it should be using a mutex. But the mutex should be the one protecting those non-thread-safe operations, not protecting the object.
I'm having a little trouble visualizing your example. Is Ownership exclusive? Or are these just links? (Can an object be owned by multiple tasks?). When the bad allocation exception is thrown, is it the objects that need to be culled or the ownership list?Are bad allocation exceptions a common, recoverable path, or a catastrophic one?