Suggestion for a lot of chained Task
You may not be able to get away from chaining a ton of ContinueWith invocations together. However, you might be able to create a builder class with methods that you pass parameters to so you don't have to call ContinueWith from calling code. 

It looks like you might be able to remove a lot of duplication by extracting your anonymous methods into one or more stateless (probably static) methods that you can reuse by passing the method signature in, e.g. 

private static void SetFlattenedException(Task stoppedTask, TaskContinuationOptions options)


You can also start going down the route of wrapping continuations in method calls with additional Action parameters to "inject" code to execute, but given that it tends to lead to a lot of "inside-out" code that is hard to follow, I'd use sparingly.