matrix2x2
(* {{{a1, a2}, {b1, b2}}, {{c1, c2}, {d1, d2}}} *)
Map[Hold, matrix2x2, {2}]
(* {{Hold[{a1, a2}], Hold[{b1, b2}]}, {Hold[{c1, c2}], Hold[{d1, d2}]}} *)
And so:
ReleaseHold[Map[Hold, matrix2x2, {2}].Map[Hold, matrix2x2, {2}]]
(* {{{a1^2 + b1 c1, a2^2 + b2 c2},
{a1 b1 + b1 d1, a2 b2 + b2 d2}},
{{a1 c1 + c1 d1, a2 c2 + c2 d2},
{b1 c1 + d1^2, b2 c2 + d2^2}}} *)