I found this:
type MergeSubtypes<T, U = T> = T extends U ? Exclude<U, T> extends infer Rest ? T extends Rest ? never : T : never : never;
And it does seem to work, but maybe someone can still explain the core reason.