Depending on how different you need them to be, just setting current mesh based on execution side, while still being the same pawn - may be way simplier.
A bit more complex approach, if you really need it, you can have both of pawns exist on server and have a custom AActor::IsNetRelevantFor()
to replicate them only to clients you need
Or to have a single pawn on server and on “non-local-clients” spawn a local pawn that will be attached to\getting position from the invisible server’s pawn. Though I think options above are simpler