Might be useful to combine all three into one method: IO<T>.ContinueWith(IO<T> onDone, IO<T> onError). Frankly, I was surprised by the behavior of Concat(). I expected it subscribe immediately and then serialize the observations.
It might be helpful to come up with a naming scheme where the method name hints at if the supplied observable will be subscribed to immediately (like Zip... or should that be Combine?) and those which subscribe later. For example the suffix "Then" may work: ConcatThen(), CatchThen(), OnErrorResumeNextThen(), RepeatThen(), etc.