Interesting. Yes, I think this is a bug, though you are the first to the report it.
Would you mind working a bit with me to develop a fix? I'm going to propose some code. It would be terrific if you could try it out locally and let me know if it fixes your situation the way you'd like. OK?
BTW, I'm going to give this to you in VB but if you prefer it in C# left me know. I never know which language to publish these work arounds in!
In App_Code\Adapters\GridViewAdapter.vb (or cs) you need to dig down until you find the WriteRows method. In it, you'll find a loop that goes over each cell in the row. We need to add some logic inside that loop so we skip cells that are in columns that aren't visible. The logic I propose is this:
For Each cell In row.Cells
If gridView.Columns(row.Cells.GetCellIndex(cell)).Visible Then
writer.WriteLine()
cell.RenderControl(writer)
End If
Next
Can you give that a shot? If I've not been clear about what's needed let me know and I'll try to do better. It's nearly midnight and I'm a little blurry.