This is interesting. I profiled it, and it turns out it is this line in Processor.Add method:
return session.Query<Property<T>>().Single();
ISession.Query returns IQueryable, which uses Expressions. So, it gets compiled in a tight loop, creating various objects related to IL generation.
When you moved the processor inside the tight loop, it became so slow (as it needs to compile the rules and build the session factory) that you no longer noticed the footprint growing.
It also does not really leak memory, but all these objects sit in a finalizer queue. So, if memory pressure got really high, all that stuff would have gotten reclaimed.