Проблема заключается в том, что тип метода фабрики разрешается во время выполнения, поэтому метод считается «открытым». В этом случае универсальный тип аргумента будет возвращать TEntity, как вы видите.
К сожалению, (если я что-то упустил), единственный способ узнать, какой тип TEntity, - это если сначала создается закрытый метод с использованием MethodInfo.MakeGenericMethod, а затем выполняется, что, конечно, вряд ли будет сделано вашими вызывающими. .
См. Эту страницу MSDN для получения дополнительной информации.