Turns out we were calling setLodLevel() every frame, which should be called in discreet steps instead.
This morning I added lod facets to the entities, so that they track their current lod, at what lod distance they switch, and how many lods they should use.
While debugging that, I found a nice perf problem on the crypt level, where for point lights, each visible entity was potentially doing a raycast to each light on the level each frame, rather than just those he might be near, so I fixed that as well.
I added keys & locked doors yesterday, and in the process added a field to each facet record that specifies whether that field should be reloaded from the db every level load or whether it remains customizable by the game and/or designer. This way you can place the same door entity, and customize its locked/unlocked state without having to make two entity types. On the other hand, if there is a facet that is permanent, like "type", this one is reloaded from disk on a level load, so that if that changes, there is no need to rebuild the level.