Этот код работает нормально:
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);
Он портит массив, и все его содержимое становится беспорядочным и не сохраняет свой первоначальный индекс. Может, у меня просто мозги кипятятся или что-то в этом роде?