I took a small look at your repo and already did some small performance tests.
I noticed that you made use of
GraphicsDevice.GetBackBufferData() which was originally implemented to have a quick way of taking a screenshot or snapshot of the current BackBuffer (if I remembering correctly) and should be a bit slow if called continuously.
However for me and some quick first test it doesn't turned out that badly. I managed to have 9 GL controls (from you) and 9 DX controls (from MonoGame.Forms) and they worked all without lags and below 10% CPU usage (Intel Core i5-7600K). Further it's possible to adjust the intervall, which raises the performance.
Before you posted your solution of MonoGame GL controls, I played around with the abbility of SDL_Surface returning the pixels of the screen as a pointer and I marshaled it to a byte array. So I had kinda the same approach and i'm thinking it is a way we can and should go (though i'm not an expert at this and still thinking of having a robust SwapChainRenderTarget.GL would be the best thing).
That's why I plan to catch up on your idea with the BackBufferData and creating a SwapChain (alike) with it. Then it could possibly a simple thing to implement it to the MonoGame.Forms library without much hassle as a consistent integration.
I would then let the community and MonoGame.Forms users do their own integration and performance tests and see how it turnes out on different machines and editor needs.
As I said earlier in this thread: I'm always open for your ideas and suggestions as well as your sample projects showing feature ideas and so on to make the MonoGame.Forms library more awesome. So I will take my time and start experimenting with it further.
I start working on it on monday and will reply back with my experience.
Till then thank you very much for your effort and have a nice day and weekend everyone!