Коллекция DataGridView.SelectedColumns является отдельной коллекцией от DataGridView.Columns и может иметь другой набор (подмножество) столбцов.
Например, если у вас есть представление 5 столбцов, а третий и четвертый выбраны, то
DataGridView.SelectedColumns.Count == 2
DataGridView.Columns.Count == 5
и вы используете четвертый столбец (индекс 3), ваш код становится
DataGridView.SelectedColumns[3]
, который взрывается (правильно) с IndexOutOfBounds.
Чтобы подвести итог, в вашем случае вы должны использовать свойство Columns, а не SelectedColumns.