So, what this really seems to boil down to, is:
The Ruby C API is returning objects that are not correctly reference-counted for a short period of time and are incorrectly subject to GC.
This doesn't seem fatal to me, just not reasonably fixable from the GC side. It might be true, that a new API is needed to hold refs in the C side.