ExpressionTreeParser.ParseNode() and ExpressionTreeParser.GetQueryOperatorExpression() use a simple heuristic for detecting if an expression represents a subquery, e.g. detecting Array.Length is hardcoded into the system. There should be an extension point similar to ExpressionTreeTransformer and NodeTypeRegistry to allow custimizing the rules for detecting a sub-query.
See also https://github.com/aspnet/EntityFramework/issues/9242#issuecomment-317288737