Running on recent master, commit f1dbf92ff0475a01d20170ea422c1d086acbbc57

If I run:
```
test/functional/feature_fee_estimation.py --randomseed 108574360997204915
```

I get:
```
2020-12-19T20:14:06.175000Z TestFramework (INFO): Initializing test directory /tmp/bitcoin_func_test_bcwexp78
2020-12-19T20:14:07.738000Z TestFramework (INFO): This test is time consuming, please be patient
2020-12-19T20:14:07.738000Z TestFramework (INFO): Splitting inputs so we can generate tx's
2020-12-19T20:14:10.870000Z TestFramework (INFO): Finished splitting
2020-12-19T20:14:12.104000Z TestFramework (INFO): Will output estimates for 1/2/3/6/15/25 blocks
2020-12-19T20:14:12.104000Z TestFramework (INFO): Creating transactions and mining them with a block size that can't keep up
2020-12-19T20:14:15.879000Z TestFramework (INFO): Creating transactions and mining them at a block size that is just big enough
2020-12-19T20:14:21.104000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/home/sdaftuar/ccl-bitcoin/2020-12-latest-master/test/functional/test_framework/test_framework.py", line 126, in main
    self.run_test()
  File "test/functional/feature_fee_estimation.py", line 256, in run_test
    check_estimates(self.nodes[1], self.fees_per_kb)
  File "test/functional/feature_fee_estimation.py", line 140, in check_estimates
    check_smart_estimates(node, fees_seen)
  File "test/functional/feature_fee_estimation.py", line 130, in check_smart_estimates
    % (feerate, last_feerate))
AssertionError: Estimated fee (0.000565) larger than last fee (0.000479) for lower number of confirms

```
}
    if ((failBucket.totalConfirmed + failBucket.inMempool + failBucket.leftMempool)) {
        failed_within_target_perc = 100 * failBucket.withinTarget / (failBucket.totalConfirmed + failBucket.inMempool + failBucket.leftMempool);
    }
    LogPrint(BCLog::ESTIMATEFEE, "FeeEst: %d > %.0f%% decay %.5f: feerate: %g from (%g - %g) %.2f%% %.1f/(%.1f %d mem %.1f out) Fail: (%g - %g) %.2f%% %.1f/(%.1f %d mem %.1f out)\n",
             confTarget, 100.0 * successBreakPoint, decay,
             median, passBucket.start, passBucket.end,
             passed_within_target_perc,
             passBucket.withinTarget, passBucket.totalConfirmed, passBucket.inMempool, passBucket.leftMempool,
             failBucket.start, failBucket.end,
             failed_within_target_perc,
             failBucket.withinTarget, failBucket.totalConfirmed, failBucket.inMempool, failBucket.leftMempool);
    if (result) {
        result->pass = passBucket;
        result->fail = failBucket;
        result->decay = decay;
        result->scale = scale;
    }
    return median;
}
void TxConfirmStats::Write(AutoFile& fileout) const
{
    fileout << Using<EncodedDoubleFormatter>(decay);
    fileout << scale;
    fileout << Using<VectorFormatter<EncodedDoubleFormatter>>(m_feerate_avg);
    fileout << Using<VectorFormatter<EncodedDoubleFormatter>>(txCtAvg);
    fileout << Using<VectorFormatter<VectorFormatter<EncodedDoubleFormatter>>>(confAvg);
    fileout << Using<VectorFormatter<VectorFormatter<EncodedDoubleFormatter>>>(failAvg);
}
void TxConfirmStats::Read(AutoFile& filein, int nFileVersion, size_t numBuckets)