Figured out why tx pool validation was failing. Formerly chain_state(chain_state) was the signature for constructing a promotion to pool state. Obviously that's also the signature for default copy construction. So when an additional system::settings parameter was added to that promotion signature, the existing callers became copy constructions, resulting in a failure to promote top block state to pool state... instead remaining one block lower.