The solution was deceptively simple. Make the single value list is a constant inside the expression (rather than a parameter) and the recompileRequired code does not get triggered:
var result = (from t in Table
select new TableModel()
{
Name = t.Name,
List = (from o in (new int[] { 0 }) where t.SomeValue != null select t.SomeValue),
}
);