Right now USoftObjectProperty does not implement NetSerializeItem so it falls back to the implementation in UObjectPropertyBase. This only works correctly if the object happens to be in memory, otherwise it will replicate it as null. It needs to replicate the path as a string instead, which will handle both loaded and unloaded objects.
This has come up a few times from licensees such as https://udn.unrealengine.com/questions/449760/tsoftobjectptr-will-fail-to-replicate-if-object-is.html
There's no existing public thread on this issue, so head over toAnswerHub just mention UE-66910 in the post.