I don't know if it would throw a code (it usually doesn't), but possibly the engine temp sensor (not the gage/light sender) could be defective. If the sensor reads as "always cold", the mixture would be rich, hot >> lean.
Scientific Wild-Assed Guess...