Regarding 1: if you open up dmesg after it happens and you see an error regarding “No edid read”, your GPU is having a hard time automatically getting the monitor’s edid over display port. My 7800xt has this issue.
If your monitor setup doesn’t change much, you can manually set the edid on a per output basis. Here is a good guide.
Also, regarding 3: you may need to set your amdgpu feature mask in your kernel parameters.
For the same reason spoken languages often have semantic structures that make a literal translation often cumbersome and incorrect, translating nontrivial code from one language into another without being a near expert in both langauges, as well as being an expert in the project in question, can lead to differences in behaviour varying from “it crashes and takes down the OS with it”, to “it performs worse”.