Well, the type of the method in this case includes the original type, the pep language doesn’t specify that this is only safe on staticmethods or require that it is safe to rebind to a new type that isn’t a subtype of the original, but allows constructing a structural type which then by definition isn’t a subtype of the original.
If you pull methods from two different concrete types, rather than from protocols, you’re now running into essentially an ad-hoc intersection requirement to determine the type of Self for these methods.
It gets significantly harder than it already starts out, to justify rebinding to an arbitrary type with out consideration when looking at user-defined descriptor types.
None of this is actually explored in the pep.
In terms of variance issues, there’s a few that come up without explicit typevariables due to some things that are implicit typevariables, as well as python’s data model. Prior discussions about Self and __replace__ would cover a few of those, but that’s not an exhaustive set of the ways this can arise. Notably of Self, rebinding Self to an unrelated type (unrelated via subtyping, which a new protocol would be) is known unsound.
I don’t think this is actually reflective of the pep’s goals. While the type is being copied, the reason the type is being copied is so that libraries that apply transformations to types from runtime types to create new types have a way to express their behavior. They aren’t going to magic into existence a method definition, they have to get that implementation from somewhere, and that’s generally going to be from the type they are copying the type of the method to do so.