OK a backport to 3.5 was possible and the tests were successful. We will release a 3.5.5 containing this changes.
Further improvements, like having a mbean to reinitialize the system sessions, will be done for 3.6. I will now compare the two strategies to make a final decision what we make the default:
a) JCRSessionPerThreadSystemContext (would be saver as the sessions are not shared)
b) SingleJCRSessionSystemContext (used in current tests)
The main issue with a) was that the observation stops when you close a session so I had to add a hack to check for active observations and prevent closing in that case. But I would still prefer a) as each thread has its own session (thread save, sessions are alway up to date)