The current hazard pointer implementation in WiredTiger never reduces the number of active hazard pointers in a session from the high water mark. That means that if a session has many hazard pointers out at a point in time, all future walks will include up to the high water mark.
We could reduce the size in __wt_hazard_clear if the pointer being freed is the last in the list. Or even more simply clear the size in session reset.