E042 came up again today. I'll try this Deoxit D5 on the connections at the ECM next. It says it removes oxidation and adds a coating that reduces intermittents and arcing. From what I've read, the coating is conductive when heated but insulating when not, so it makes it a stronger connection where the terminals meet, but won't cross over the plastic to short out other terminals.
The car still runs weird sometimes even without setting the code. I suspect that the EST circuit connection is intermittent, so the ICM isn't always getting all the spark timing pulses from the ECM; it might be that only some of them are coming through.