in reply to Ref to a list not being equivalent to a list of refs to each element

OK, only a shot in the dark after playing with B::Concise and B::Deparse but here goes . . .

In the first and third cases the reference is to a readonly PV value. This is copied directly into the SV slot of *a and when you try and modify it you get the error.

In the middle case either a non-readonly copy of the PV is pushed onto the stack, or the make-reference-to-list opcode (refgen I think) makes a non-readonly copy. Whichever case it is, the PV that's stuck in the SV slot of *a is mutable.