(JDK-8282194 covers the special case of dynamic constants.)
C1 handles unresolved constants by performing constant resolution at runtime and then putting the constant value into the generated code by patching it. But it treats the not-yet-resolved value as a pure constant without any side effects.
It's not the case for constants which trigger class loading using custom class loaders. (All non-String constants do that.)
There are no guarantees that there are no side effects during class loading, so C1 has to be conservative.