Were field titles not escaped in SS3? That seems like a bug, but now that you mention it I think I have relied on that quirk before, maybe not on titles but for including formatting in descriptions.
According to the docs though, ->setTitle() expects escaped HTML… which seems weird (and could be wrong). I wonder if the constructor expects an unescaped string but the method expects HTML?
A bit hacky but if the docs are right, could you modify your TextField calls something like this? Or would that be too much re-work?
TextField::Create('SomeField', 'My plain text title')->setTitle('My <b><i>fabulous</i></b> title');