So, progress is happening. The text is still bugged, but the menu and actual act of promotion has been mostly worked out. I'll look into how the strings are stored/loaded in the text functions, as I think the issue is with the description strings and not the class names.
Note that the "display unarmed sprites at promotion screen" patch is necessary if any of the promotion options don't use the weapon type that the unit is currently equipped with, otherwise it crashes when it tries to load the sprite.
I've used hardcoded values for this, but interesting to note that the values for which options to display get overwritten/pushed out of scope by the time the actual selected promotion gets saved, so I had to hack in the same hardcoded list in two separate places. Given that the game already hardcodes the third promo options for trainee classes I don't think it's too big a deal.
I'll upload my source code when it's done, it's thankfully fairly simple to add new classes to the eligibility list.