I have switched to /localdataonly and there are some bugs here that are not in the server data files. I am pretty sure the code has no way to upgrade a level 1 cityhub to a level 2 cityhub specialization. The file currently upgrades to a generic cityhub2 and the population upgrade specifies a cityhub3, which, as you know, no longer exists. You need the level 1 to upgrade to level 2 from the special city improvement. Have CityHub2_Town as an "upgradestoimprovement" tag. Then add "requiresimprovement," 1 as well as "requiredimprovement," TradeGuild (the internal name for Town). That should make the level 1 city upgrade to a level 2 city town naturally. I have no way of knowing what the internal code uses, but this is how it should look in the xml on our side.
This is low priority, but I am sure we all want the local data to work like the server data. When you get a chance, this is the ideal way to do it. No need to have a generic level 2, which seems to still be in the code as well. It doesn't need to be there in my version of the upgrade system.