The issue seems to be that it's impossible to go from 32PM -> 16RM in one go. You must first pass through 16PM.
That's because the bitness (D bit) (Default operand size for CS) in the GDT is still cached in the hidden part of the Segment Selectors.
So, you must first change to a 16 bit gdt.
Question, is the 16 bit GDT the same size as the 32 bit one. Set the D bits and base and limits within the 64kb and 1mb limits.
Then in 16 bit protected mode, jump to real mode.
Question: To be sure and double check: 16 bit PM exist on modern machines?
My new post on retrocomputing ended up having nice information/answers and was very helpful. Anything relevant or complementary you want to say.