You have a lot of patches to your framebuffer. Did you try to eliminate ALL unnecessary patches? In the end, I needed very few.
When you plug in the hdmi screen and everything goes black, did you try to Remote Desktop into IORegistry Explorer?
So my, limited knowledge advice is ....
First, get rid of all unnecessary patches. All of em. If you don't need a patch for the built-in display. get rid of that too.
Second, reboot, check IOReg - save it.
Third, plug in hdmi monitor and check remote desktop IOReg. Save it.
Fourth, compare the two IORegs against each other. Look carefully for index, busid, etc.