Вы на правильном пути, но ваша матрица транспонирована так, как она должна быть.Вот почему вы получаете сумасшедший перекос, когда вы пробовали разные значения. Смотрите это.
Поместите вектор перевода в последний ряд, а не в последний столбец, и вы будете в порядке.
modelMatrix.Value = new Matrix4(
5, 0, 0, 0,
0, 1, 0, 0,
0, 0, 5, 0,
0, 0, -3, 1);