You cannot try to reference this.gridDocuments.Model.Cols.Size[2]); from within the code when e.Index = 2. The reason is that trying to retrieve this.gridDocuments.Model.Cols.Size[2]) trigeers a call to QueryColWidth with e.Index = 2. So, you get into a recursive call situation which leads to teh stack overflow.
So, instead of
int width = this.gridDocuments.Model.ColCount <= 0 ? 0 : (this.gridDocuments.Model.ColWidths.GetTotal(0, this.gridDocuments.Model.ColCount-1)-this.gridDocuments.Model.Cols.Size[2]);
try
if(e.Index == 2)
{
int width = this.gridDocuments.Model.ColWidths.GetTotal(0, 1);
if(this.gridDocuments.Model.ColCount > 2)
width += this.gridDocuments.Model.ColWidths.GetTotal(3,this.gridDocuments.Model.ColCount);
e.Size = this.gridDocuments.ClientRectangle.Width - width;
e.Handled = true;
}