The GameState should only be used for information that is the same across all users. If the information is unique per player and it should be visible to other players then PlayerState should be used. If the information is only relevant between the server and the client then the PlayerController should be used.
There is generally two ways of handling updating UI. Event based or tick / immediate / polling. Personally I prefer event based as it has a lot less overhead and is easier to debug.
If you need to display Replicated variables then use OnRep rather than RPC’s since RPC’s (even the reliable ones) can be missed.