When an actor is marked as replicated, only the properties that are also marked as replicated will actually synchronize to all the clients connected to the server.
Normally properties are marked as replicated within the UPROPERTY keyword in the headers. If the property was added via blueprints, you can also mark that property as replicated there.
One other requirement is that the material object needs to have been loaded from a package to be net addressable.
If all these requirements are met, you should be able to replicate references to material properties.
One safe way to replicate something like a material change like you mentioned would be to maintain a separate array of materials that are replicated, and then set these as the skin when you detect they change through the OnRep mechanism.