私は混乱している状況にあり、助けを求めていました。以下のコードでは、FindById メソッドはリターンをキャストしなくても機能しますが、UpdatedAuditedEntity 呼び出しは機能しません。ご了承ください:
- AuditedEntity は Entity から派生します
 - auditedEntity のエンティティへのキャストは機能せず、T へのキャストのみが機能します。
 
ここで何が欠けているかについての洞察は大歓迎です。最初は分散が関係していると思っていましたが、前述のようにダウンキャストを試みましたが成功しませんでした。
    public class NHibernateRepository<T> : NHibernateBase,
    IRepository<T> where T : Entity
{
    public IEnumerable<T> FindAll(Expression<Func<T, bool>> predicate)
    {
        var query = GetQuery(predicate);
        return Transact(() => query.ToList());
    }
    public T FindById(int id)
    {
        // TODO: Why does this work when below doesn't
        return FindAll(e => e.Id == id).FirstOrDefault();
    }
    private T UpdateAuditedEntity(T item)
    {
        var auditedEntity = item as AuditedEntity;
        if (auditedEntity == null) return item;
        auditedEntity.DateModified = DateTime.UtcNow;
        // TODO: figure out why this cast is necessary
        return auditedEntity as T;
    }