POE is a red herring.
A child process cannot safely manipulate a GUI copied from the parent process. As both copies diverge, they will increasingly fight with each other over what the GUI should look like. As you've seen, eventually X will give up trying to make sense of multiple conflicting requests, and the program will fail.
The parent process should do all GUI work. If child processes require GUI interaction, they should request the parent to do that for them. The parent process can then inform children of the user's input.