After conversation on irc it appears there's some cases where Bitcoin core will serve feerate information even though it loaded a fairly old fee estimates file and is still syncing the chain. This is pretty dangerous for lightning nodes, at least on legacy channels or pre-package-relay.

The immediate improvement would be to store fee estimates to disk once an hour or so to reduce the chance of having an old file. From there this case could probably be detected and refuse to serve estimates until we sync.
*/
    static constexpr double FEE_SPACING = 1.05;
    const fs::path m_estimation_filepath;
public:
    
    CBlockPolicyEstimator(const fs::path& estimation_filepath);
    ~CBlockPolicyEstimator();
    
    void processBlock(unsigned int nBlockHeight,
                      std::vector<const CTxMemPoolEntry*>& entries)
        EXCLUSIVE_LOCKS_REQUIRED(!m_cs_fee_estimator);
    
    void processTransaction(const CTxMemPoolEntry& entry, bool validFeeEstimate)
        EXCLUSIVE_LOCKS_REQUIRED(!m_cs_fee_estimator);
    
    bool removeTx(uint256 hash, bool inBlock)
        EXCLUSIVE_LOCKS_REQUIRED(!m_cs_fee_estimator);
    
    CFeeRate estimateFee(int confTarget) const
        EXCLUSIVE_LOCKS_REQUIRED(!m_cs_fee_estimator);
    /** Estimate feerate needed to get be included in a block within confTarget
     *  blocks. If no answer can be given at confTarget, return an estimate at
     *  the closest target where one can be given.  'conservative' estimates are
     *  valid over longer time horizons also.
     */
    CFeeRate estimateSmartFee(int confTarget, FeeCalculation *feeCalc, bool conservative) const
        EXCLUSIVE_LOCKS_REQUIRED(!m_cs_fee_estimator);
    /** Return a specific fee estimate calculation with a given success
     * threshold and time horizon, and optionally return detailed data about
     * calculation