'Cast' has a meaning in the scope of a linq query, as it is used to deal with inheritance types in a query ran on the db. I don't see how that can be seen differently. So, if you have metaData.Employee and you want to apply a filter for a subtype to that iqueryable, you can use Cast<ManagerEntity>() on that iqueryable, to signal the query that you want to deal with different types. Casting to an interface has a different meaning: fetch all types implementing that interface. That's a feature not supported by LLBLGen Pro, you can't filter on interfaces.
With repositories, you shouldn't return IQueryables: they're not sets, they're queries with inside them the fetch mechanism. The whole point of a repository is to provide fetched sets of entities, not queries which aren't fetched yet. I.o.w.: if you have to append query operators to elements received from a repository, you should use a specification pattern implementation and pass the specification to the repository which then would append the query elements before returning the elements to you. Why else use repositories?
I don't follow what mindscape did with removing a limitation, as Cast<> is a logical operator in a linq query, and IF the o/r mapper supports filtering on interfaces, it could support that too through Cast<Interface> but as said, we don't support that, so you can't use it that way.
So for you it's not really useful to append Cast directly to the IQueryable and returning an IQueryable, simply because the repository shouldn't be used as a query creation class, but as a base for fetched entities for the aggregate root it manages. I.o.w.: fetching is done inside the repository.
So your methods can return IEnumerable<IProductEntity> and you simply first fetch the data to an entity collection (either by ToList() or by the more efficient Execute method on ILLBLGenProQuery interface on the queryable) and then apply cast to that object.