I can confirm that changing in sage.matrix.matrix_generic_dense.Matrix_generic_dense._multiply_classical the line from left._entries[m+k]._mul_ to just
left._entries[m+k]* , the code works as expected. So the problem is probably the _mul_.
I think this is a general problem that was not discovered before: as far as I can see, it's legal for element types to have a cdef _mul_. However, in the matrix code, I think it ends up being looked up as a python method. I'm not sure that matrix elements always have to inherit from Element, so I'm not sure a cython typecast to it is warranted. Changing to "*" and just let the coercion framework figure it out is definitely valid, but it should be checked if that brings a performance penalty.
Someone should make a ticket and alert the coercion gurus to it.