The coin selection algorithm present in Bitcoin Core 0.19 tries to either find a solution where there is no change output, or a solution where the change is as close to 0.01 BTC as possible without going under that amount, ignoring fees.
There are two major components in 0.19's coin selection that we need to consider when analyzing this issue. The first is how it determined fees, and the second how it actually chooses the inputs. (There is a third part with finding a changeless solution, but because your transaction has change, this does not matter).
The fees were determined iteratively. It would choose inputs, calculate the fees for a transaction with those inputs, and if it did not happen to have enough value, it would increase the amount to select by that fee value and try selecting again.
For the actual selection part it would first pick out all of the inputs whose value is less than the target, and find the lowest larger input - the lowest valued input whose value is larger than the target. If the lowest larger input does not exactly match the target, it will then do a stochastic approximation.
This approximation will iterate all of the inputs whose value is less than the target and randomly decide whether to include or exclude the input. It will do this loop 1000 times. Of the input sets that this finds, it will choose the one whose total value is the minimum that is still greater than the target (similar to the lowest larger input).
If this approximation does not result in an exact match, and the sum of the inputs whose value is less than the target is greater than the target plus a minimum change of 0.01 BTC, then the approximation will be run again with the target increased by that 0.01 minimum change value.
With this approximation algorithm, an important effect is that if you have a lot of small inputs and just a few outliers that are much higher valued, it is very likely that the approximation will choose a lot of the small inputs to meet a higher value rather than the large inputs with a few small ones. This is due to the randomness used when deciding whether to include or exclude an output.
With that in mind, what happened with this transaction? While I can't say for sure without knowing the values of all of the inputs in the wallet at the time, I can make an educated guess. However we do know that the target value is 0.51977991.
The first thing to notice is that the large input is ~0.025 greater than the target, and with a wallet with lots of small inputs, it's likely that a set of smaller inputs can be chosen that is between the target and that single large input. So in the first iteration, what happened is that the approximation found a set of inputs where the value is between the target and the large input. This would be a large input set and thus require a high fee.
In the next iteration the target would be increased by that fee, and because the approximation is limited to the inputs smaller than the new target, it would still be picking small inputs. So it would end up choosing even more smaller inputs to make up for the fee that is needed.
With a few hundred more inputs of similar size to the ones that ended up being picked, it could be that the first iteration chose ~800 inputs. This would have pushed the target to be larger than your large single input, but your large single input would have just ended up not being picked amongst the multitude of smaller inputs.