I think I know what the problem is. Your expression returns type object.
If you change this to Expression<Func<T, R>> the return type should be correctly inferred, and UnaryExpression (which I will assume is some boxing operation) should not occur.
Update:
The signature for Include should be:
public void Include<T, R>(Expression<Func<T, R>> expression)