One little wrinkle was that the parameter to the object int he DBFunctionCall method consisted of an already establised expression. After some permutations my solution was to create a new EntityField2 that held the expression and then use this as the parameter and everything worked just fine.
ResultsetFields fields = new ResultsetFields(2);
fields.DefineField(MovieFields.Title, 0, "Title", "Rating1");
fields.DefineField(RatingFields.Rating, 1);
IExpression leftOperand = new Expression(RatingFields.Rating.SetObjectAlias("Movie1"), ExOp.Sub, RatingFields.Rating);
EntityField2 tmpAbs = new EntityField2("ABS2",leftOperand); // <-- create this did it
fields[1].AggregateFunctionToApply = AggregateFunction.Count;
fields[1].ExpressionToApply = new DbFunctionCall("ABS", new object[] { tmpAbs });) ;
Anyway, thanks again David.