Na ActionResult Adiciona o correto não seria abrir a Session e depois fecha-la ?
public ActionResult Adiciona(Produto produto)
{
ISession session = NHibernateHelper.AbreSession();
ProdutosDAO pDAO = new ProdutosDAO(session);
pDAO.Adiciona(produto);
session.Close();
return RedirectToAction("Index");
}