Sounds to me like plausible candidates are
(1) opt compiler GC map bug
(2) problems with OSR & GC.
(3) latent bug in other part of the system that gets exposed because opt compilation is a memory pig and forces more GCs in strange places.

To rule out the second one try running with -X:aos:logging_level=2 and look at the log file to see if there are any OSR events.  I would investigate (2) as the most likely cause mainly because of the benchmarks it is crashing on.  These are benchmarks where it is not unusual to see OSR actually do something.  You can also turn off OSR with   -X:aos:osr_promotion=false -X:opt:osr_guarded_inlining=false -X:opt:osr_inline_policy=false

If it runs ok with OSR turned off, that probably points to a problem with either OSR itself. the GC maps for an OSR point, or some modification you made to the opt compiler not meshing nicely with OSR support.