Mesh materials update on client but not server

Of course as soon as I post the question I find a workaround - which is to manually force a material override on the server. For anyone that hits the problem:

skeletalMesh->SetSkeletalMesh(mUpgradedSkeletalMesh);

for (int32 index = 0; index < mUpgradedSkeletalMesh->Materials.Num(); ++index) {
	FSkeletalMaterial skeletalMaterial = mUpgradedSkeletalMesh->Materials[index];

	skeletalMesh->SetMaterial(index, skeletalMaterial.MaterialInterface);
}

Still not sure what the underlying cause is, as I haven’t been able to dive quite that deep in the engine. Could it be from some sort of server optimization that skips updating materials (headless server doesn’t care about visuals) except in instances where it’s swapping out the entire skeleton?