I am not sure whether this will work in your case, but you can try doing your work once by identifying when you are getting the ColumnChanging from with RowLeave. Below are some code snippets showing how this might be done.
private bool inRowLeave = false;
private void gridDataBoundGrid1_RowLeave(object sender, GridRowEventArgs e)
{
inRowLeave = true;
}
private void gridDataBoundGrid1_RowEnter(object sender, GridRowEventArgs e)
{
inRowLeave = false;
}
private void datatable_ColumnChanging(object sender, DataColumnChangeEventArgs e)
{
if(!inRowLeave)
Console.WriteLine("datatable_ColumnChanging " + e.Column.ToString() );
}