На каждой итерации вы присваиваете изображение pictureBox1.Image
.
pictureBox1.Image = temp;
Затем на следующей итерации вы вызываете dispose для этого изображения:
pictureBox1.Image.Dispose();
Здесь, pictureBox1.Image
указывает на изображение в вашем bitmaparray
, так что вы фактически удаляете изображение из массива.
Я думаю, вам просто нужно избавиться от Dispose.
(все это основано на комментарии Уве Кейма, спасибо)