I have looked a the copy compiler code and compared it to the rename code and narrowed the problem down the the following code not being included in the rename code as the rename works correctly with the equivalent block of code added (I added a rename function on compilerfactory.cpp similar to the existing copy function):
Compiler::m_CompilerIDs.Remove(compiler->GetID());
compiler->SetName(newName);
compiler->m_ID = newName;
compiler->MakeValidID();
This code is required as the compiler->m_ID was not updated in the current rename source code, which caused the settings to be saved against the old compiler->m_ID "name". When CB is restarted the new name is used to generate a "new" compiler->m_ID, which is then used to load the settings from the default.conf file, but in the case I found there will be no entries and therefore the masterpath is blank (and so are all of the other settings BTW). Ouch!!!!
Looks like the rename is either not used or if it is used then other settings are updated that cause the compiler->m_ID to be updated and therefore the renamed compiler is correctly saved in the default.conf and on a restart the auto-detect is not shown.