If RenderPerformanceListener is active then sessions will be created even for stateless pages. This happens because RPL is an IComponentInstantiationListener which adds a Behavior to every component. That causes a call to addStateChange() which in turns calls AbstractPageManager#touchPage. At this point #isPageStateless always returns false and so a session is bound. The problem is that all this happens very early in the creation of a Component when it's not fully initialized yet. If RPL implemented IComponentInitializationListener instead this problem wouldn't occur.
I can't really tell if it's a bug or not that adding a Behavior in an IComponentInstantiationListener makes pages stateful... Maybe that's just generally not a good idea.