You are assigning each loaded image to the same value "imageColumn.Image" and then trying to assign bmpImage to dgvDisplayTiles.Rows[i].Cells[3].Value that presumably is a TextColumn (not good). Add imageColumn to the dgvDisplayTiles before your loop. Delete the assigment to "imageColumn.Image"
Then change your assignment to:
dgvDisplayTiles.Rows[i].Cells[imageColumn.DisplayIndex].Value = bmpImage;