Это исключение выдается, если вы пытаетесь вставить () по индексу, который больше текущего счетчика списка. Скорее всего, вы пересекаете «матрицу» таким образом, что утверждение
matrix[xPos].Insert(yPos, i);
вставляет в список, который еще не имеет размер yPos. Самый простой способ избежать этого - изначально добавить достаточное количество элементов в каждый внутренний список:
// Intialize the inner lists
for (int j = 0; j < number; j++)
{
matrix.Add(new List<int>());
// New code here:
for (int k = 0; k < number; k++)
matrix[j].Add(0);
}