Этот код отлично работает:
var newArray = new Rectangle[newHeight, newWidth];
for (int x = 0; x < newWidth; x++)
for (int y = 0; y < newHeight; y++)
newArray[y, x] = (x >= width) || (y >= height) ? Rectangle.Empty : tiles[y, x];
Но мне не повезло заменить его Array.Copy. В принципе, если размер массива увеличен, он просто добавляет пустые прямоугольники к краям. Если он меньше, то он должен просто отрезать края.
При этом:
Array.Copy(tiles, newArray, newWidth * newHeight);
Он испортил массив, и все его содержимое стало неупорядоченным и не сохранили свой первоначальный индекс. Может быть, у меня просто мозг или что-то еще?