`bitcoind` and `bitcoin-qt` crashes when creating a PSBT with `walletcreatefundedpsbt`

**Expected behavior**

`bitcoind` and `bitcoin-qt` should not crash and users should not see assertion errors on mainnet. Failing gracefully with some error message would be better. Although I was not able to reproduce this issue on Fedora so ideally this should be fixed.

**Actual behavior**

Error in bitcoind:

```
Assertion failed: selected_effective_value >= target, file wallet/coinselection.cpp, line 391
```

Error in bitcoin-qt:

![image](https://user-images.githubusercontent.com/94559964/192375828-d8e6f628-f52c-4aa8-ae99-19c2fe1a4934.png)


**To reproduce**

1. Create bitcoin.conf 

```
signet=1
txindex=1

signet.rpcport=38332
rpcuser=user
rpcpassword=pass

fallbackfee=0.0004
```

2. Add descriptor in a wallet using bitcoin-qt console:


```
importmulti '[{ "desc": "sh(multi(2,[aa130fed]02de62833c851509cf13c0c63e0dc3ef7b74f7d86b17e9090fab68c09830cb2f2e,[00890d8d]03cf11a2bc1371dad3691bce59e37d85b12aae6b030b533d4e7c5aedeb47a5ec0e))#j8w6g6zg", "timestamp":"now"}]'
```

3. Create PSBT using bitcoin-qt, click on different options in the error message and you will notice it creates PSBT with no change by clicking 'ignore' 3 times else crashes with others:

```
walletcreatefundedpsbt "[{\"txid\":\"e911734bf711009dd6057c88bc598df2d31c18d1cc6bd6c790a704b519d77e68\",\"vout\":0}]" "[{\"tb1q9fxp2p0sm93jdlul8v3svzn7x69zcd9ljsgans\":\"0.0009\"}]"

```

4. Close bitcoin-qt and open powershell or command prompt to create PSBT:

```
bitcoind.exe
````

```
bitcoin-cli.exe -rpcwallet=M1 walletcreatefundedpsbt "[{\"txid\":\"e911734bf711009dd6057c88bc598df2d31c18d1cc6bd6c790a704b519d77e68\",\"vout\":0}]" "[{\"tb1q9fxp2p0sm93jdlul8v3svzn7x69zcd9ljsgans\":\"0.0009\"}]"
```

**System information**

Windows 10

Bitcoin Core Master Branch


} else {
        coin_selection_params.change_spend_size = (size_t)change_spend_size;
    }
    
    coin_selection_params.m_discard_feerate = GetDiscardRate(wallet);
    
    FeeCalculation feeCalc;
    coin_selection_params.m_effective_feerate = GetMinimumFeeRate(wallet, coin_control, &feeCalc);
    
    
    if (coin_control.m_feerate && coin_selection_params.m_effective_feerate > *coin_control.m_feerate) {
        return util::Error{strprintf(_("Fee rate (%s) is lower than the minimum fee rate setting (%s)"), coin_control.m_feerate->ToString(FeeEstimateMode::SAT_VB), coin_selection_params.m_effective_feerate.ToString(FeeEstimateMode::SAT_VB))};
    }
    if (feeCalc.reason == FeeReason::FALLBACK && !wallet.m_allow_fallback_fee) {
        
        return util::Error{_("Fee estimation failed. Fallbackfee is disabled. Wait a few blocks or enable -fallbackfee.")};
    }
    
    
    
    
    
    coin_selection_params.m_change_fee = coin_selection_params.m_effective_feerate.GetFee(coin_selection_params.change_output_size);
    coin_selection_params.m_cost_of_change = coin_selection_params.m_discard_feerate.GetFee(coin_selection_params.change_spend_size) + coin_selection_params.m_change_fee;
    coin_selection_params.m_min_change_target = GenerateChangeTarget(std::floor(recipients_sum / vecSend.size()), coin_selection_params.m_change_fee, rng_fast);
    
    
    
    const auto dust = GetDustThreshold(change_prototype_txout, coin_selection_params.m_discard_feerate);
    const auto change_spend_fee = coin_selection_params.m_discard_feerate.GetFee(coin_selection_params.change_spend_size);