The OCC for end of day values for their TIMS calculations (PM Requirements) do similar smoothing. They did not for years creating horrible values for OTM puts where some were $0.00/$0.50 and some were $0.00/$0.05 on either side of the wider market.
It's caused by some "illegal" Bid/Ask prices set by the MMs, especially with Puts.
And b/c of that, then also IV and MidPrice are wrong! These are of course very important numbers.
For example an Ask price of $5 for a Put with strike $2

Only MMs can set such "illegaly high" prices, nobody else.
Of course the mathematically MaxPossiblePremium of a Put is the Strike price, ie. here $2...
I have developed some simple formula to fix the mess.
But afterwards one needs to calculate the IV anew (and that's timeconsuming when processing/scanning mass data)...
Ie. one cannot take the originalBid, originalAsk, originalIV, rather one has to "fix" them before using them in own trade decisions, and other cases (like when creating an IV list etc).
Of course, also the important MidPrice has to be calculated anew.
If anybody is interested, I could look up in my codebase. It's been a while since I worked on it. But it autom. gets applied when I read options data from my local database.