Нужно передавать индексатору номер строки и номер столбца. Для матрицы индексатор с одним аргументом — нонсенс. Кроме того, там сейчас, если не ошибаюсь, бесконечная рекурсия:
При добавлении элемента в матрицу необходимо сначала проверять, что у него ненулевое значение. Если методу Insert передан нулевой элемент, то он должен вести себя как Delete
Непонятные названия методов интерфейса MatrixCodeInterface (MinList, DiagSum, ColsSum и др.). Да и сам интерфейс должен именоваться IMatrixCode. Кроме того, стоит подумать о переименовании класса. Я бы назвал его просто Matrix, т. к. MatrixCode только запутывает.
В конструктор по массиву нужно добавить проверки на: null, нулевую длину и несоответствие длин «подмассивов» (напр., массив { { 1, 1 }, { 1 } }). Думаю, можно ещё сделать конструктор по размерности (опять же с проверками).
Необходимо упростить методы класса Matrix. Основная сложность из-за свойства NextLineItem класса MatrixElement. Нужно его убрать и переписать методы Insert, Delete, Equals и GetEnumerator