Я не могу сказать, если ваша проблема в том, что SortedColumnNames
не отсортирован должным образом (а это не так), или столбцам присваивается иной порядок, чем в списке.
Если это последнее, возможно, может быть из-за того, что вы изменяете порядок элементов в коллекции во время итерации по ней. Хотя я не вижу, чтобы это произошло ни в одном из тестов, которые я выполняю.
Как правило, я не связываюсь с порядком членства в или коллекции, которую я повторяю. Я реализую сортировку столбцов следующим образом:
void SortDataGridViewColumns(DataGridView dgv)
{
var list = from DataGridViewColumn c in dgv.Columns
orderby c.HeaderText
select c;
int i = 0;
foreach (DataGridViewColumn c in list)
{
c.DisplayIndex = i++;
}
}