### Describe the issue

Restarting bitcoin, mempool starts filling from scratch.

### Can you reliably reproduce the issue?
#### If so, please list the steps to reproduce below:
1. Wait for mempool to reach for example 3000 transactions
2. Restart bitcoin
3. Watch mempool filling slowly from scratch

### Expected behaviour
Mempool would already contain ~3000 TX on startup

### Actual behaviour
It starts at 0 and fills up slowly with a few per second.

### Screenshots.
http://imgur.com/a/or82d

### What version of bitcoin-core are you using?
Windows x64 0.14rc1 binary from https://bitcoin.org/bin/bitcoin-core-0.14.0/test.rc1/


### Any extra information that might be useful in the debugging process.
I may not be aware of how the mempool.dat thing works and there could just be a misunderstanding.

{
    if (!pindexBestInvalid || pindexNew->nChainWork > pindexBestInvalid->nChainWork)
        pindexBestInvalid = pindexNew;
    LogPrintf("%s: invalid block=%s  height=%d  log2_work=%.8g  date=%s\n", __func__,
      pindexNew->GetBlockHash().ToString(), pindexNew->nHeight,
      log(pindexNew->nChainWork.getdouble())/log(2.0), DateTimeStrFormat("%Y-%m-%d %H:%M:%S",
      pindexNew->GetBlockTime()));
    CBlockIndex *tip = chainActive.Tip();
    assert (tip);
    LogPrintf("%s:  current best=%s  height=%d  log2_work=%.8g  date=%s\n", __func__,
      tip->GetBlockHash().ToString(), chainActive.Height(), log(tip->nChainWork.getdouble())/log(2.0),
      DateTimeStrFormat("%Y-%m-%d %H:%M:%S", tip->GetBlockTime()));
    CheckForkWarningConditions();
}
void static InvalidBlockFound(CBlockIndex *pindex, const CValidationState &state) {
    if (!state.CorruptionPossible()) {
        pindex->nStatus |= BLOCK_FAILED_VALID;
        setDirtyBlockIndex.insert(pindex);
        setBlockIndexCandidates.erase(pindex);
        InvalidChainFound(pindex);
    }
}
void UpdateCoins(const CTransaction& tx, CCoinsViewCache& inputs, CTxUndo &txundo, int nHeight)