Ok, I have good news and bad news.
The good news is that I found the bug. The bad news being what you'll have to do to fix it. (Or rather what you can't do).
You're getting the rare ore required set to 62, because that last tech researched (Rare Ore Refinement) just happens to be tech number 62, after they are sorted by ID. The reason why this happens, is because when a tech upgrades a unit, it records the number of the tech in a static array. This is how you get those upgrade strings in the command pane when you click on a unit. It uses those tech numbers to lookup the tech, and shows it's corresponding upgrade string. The problem is, that static array only has room for 2 entries. After that, it starts into the unit data for the next player. Hence why when player 0 researches this tech, player 1 would have the rare ore cost set. (Well, the rare ore just happened to be the first entry in the next player's data that was set to 0, and was thought to be an empty array entry).
So basically, you can't have more than 2 seperate techs upgrade the same unit. You are however allowed to upgrade the same unit multiple times with the same tech, (I think).
In other words, rewrite your tech file. =(
I suppose you could upgrade units using a research trigger callback and some mem hacking if you needed to exceed this limit, but that's not self contained in the tech file, and anyone designing a level for that tech tree would need to use that custom DLL code.
I suppose I could look into writing a patch to prevent it from overstepping the array bounds. I make not promises though. Plus, there might be other problems that crop up. There's also the minor nuisance of only the first two upgrades getting a string listed. That's not easily fixable though due to the static memory allocation. Which again, leads back to rewriting the tech file to avoid odd behavior.