The method isn't copying enough bytes back to the original Matrix.
Although this patch fixes the issue I reported, the operator's behaviour is still different from @.
@= will modify the memory of the original Matrix object while @ will create a new one, which makes a difference when the Matrix being operating on was passed in from somewhere else. Changes made with @= will propagate outside the current scope, while changes made with @ are local.
Is this intended? This is not how the *= operator worked in 2.79.