Paper2D seems to contain a usable example.
Your explanation sounds correct, except for where to perform the upgrade. In Paper2D, upgrade code is run in PostLoad, after querying the custom version:
void UPaperFlipbookComponent::PostLoad()
{
Super::PostLoad();
const int32 PaperVer = GetLinkerCustomVersion(FPaperCustomVersion::GUID);
if (PaperVer < FPaperCustomVersion::ConvertPaperFlipbookComponentToBeMeshComponent)
{
if (Material_DEPRECATED != nullptr)
{
SetMaterial(0, Material_DEPRECATED);
}
}
}