I didn't notice it before but I see now what the problem is...
entity = new UsermasEntity();
e = (EntityField2)entity.Fields[NameConvert.ConvertFieldName(f.FieldName)];
e.ExpressionToApply = new Expression(e, ExOp.Add, 10);
da.UpdateEntitiesDirectly(entity, null);
'e' is an instance of EntityField2. At the same time you are using such instance in the expression. So when the expression is expanded, it ends with:
theField = (((theField (...) + 10) + 10) + 10)
so the expression is evaluated, then inside the 'e' parameter is evaluated, the expression is evaluated again which evaluates the field, which evaluates the expression .... boom!
So, inside the expression use the [Entity]Fields.TheFild class instead. This will create a new instance of the field to be used. So, in normal circunstances you should write the code like:
var entity = new OrderEntity();
entity.Fields["Freight"].ExpressionToApply = new Expression(OrderFields.Freight, ExOp.Add, 10);
new DataAccessAdapter().UpdateEntitiesDirectly(entity, null);
However, I see you are using a generic way of passing the field, as if you didn't know the field you will use in the expression in advance. So, try this modification in your code:
entity = new UsermasEntity();
entity.Fields[NameConvert.ConvertFieldName(f.FieldName)].ExpressionToApply =
new Expression((EntityField2)EntityFieldFactory.Create((UsermasFieldIndex)f.FieldIndex), ExOp.Add, 10);
da.UpdateEntitiesDirectly(entity, null);