Custom inspector not saving strings

I have a component that is used for saving the status of an object. It saves via string hash. The component can either automatically generate a name, or the name can be overridden (in case different objects need to access the same save data). However, my inspector code for overriding the name doesn’t seem to work:

GUILayout.Label( "Save name " );
if( m_OverrideDefaultName )
{
  m_SaveName = GUILayout.TextField( m_SaveName );
}
else 
{ 
  m_SaveName = CreateDefaultSaveName();
  GUILayout.Label( m_SaveName );
}
m_OverrideDefaultName = GUILayout.Toggle( m_OverrideDefaultName, "Override" );

Everything seems to display correctly, but if I exit the scene and load back in, none of the values have actually been saved.

I’ve tried adding an EditorUtility.SetDirty but that doesn’t seem work either.

Any ideas?

It seems as if the values are getting stomped from the prefab. That is, if I break the prefab instance (not desirable) then saving and reloading the scene works. If the prefab link is maintained then when I reload the object gets all its values set to the prefab defaults.

I don’t understand why this would happen. Do I need to mark fields as being different from the prefab manually?