Come Learn Blueprint Multiplayer with me! (aka 's a Glutton for Punishment)

I’ve played around your level, and come to conclusion that Pawn and DefaultPawn are classes that does not handle those replication check boxes.
If you switch BP_MP_Pawn’s parent class to character, the movement would replicate properly without any additional event to drive update.
I think player controller is for when you have something extra, like the mini game example in Input examples.
(And this would somehow break your script, maybe some graph needs to be recompiled.)
Edit: by break I mean I can only see one arrow spawned in client 1 window. But when still using your input script,
I can turn client4 with mouse that sees movement from client 1(also its arrow). all other 3 clients stucked at their location, no arrow to be seen.
I use gamepad to control client1, and somehow keyboard and mouse assigned to client4 on start play.

Also, I think we both misunderstand what PlayerController class is about.
If you check the input example from ContentExamples, you will see that the player controller class has nothing in its graph.
In the UFO Pawn, it uses GetInputAxisMoveForward/Right/Up for movement and GetInputAxisLookUp/Turn for pitch and yaw.
Which use the input to drive velocity, and drive camera where and align pawn rotation to camera’s view direction.
Third person obviously use a lerp and velocity direction to drive actor’s direction.

I think if we ever need to build a multiplayer game based on just Pawn, Epic has to either make a insertable movement component that already handles replications,
or expose some class functions to allow us wiring them.(Have to check those source codes for sure.)
In the mean time, I think your approach plus some custom variable with RepNotify should get the ball rolling.