Solved the problem!
The water pump gave out last week. When I pulled it off I found the impeller was all but gone! Replacing the pump solved two problems: The cabin heater had quit working (separate post) and I had this idle problem I couldn't track down since last spring.
Your probably wondering what the water pump has to do the idle. Me too!.
Consider: idle is determined by a lot of different things, including engine temperature. All these sensors (02, throttle position, water temperature, fuel pressure etc,) are sending information to the Powertrain Control Module. The PCM uses this info to set the idle. If the water pump is not circulating hot water past the thermostat in the heater hose, then the PCM is getting bogus information on actual engine temp. Thus the PCM sends an "idle up" signal to the throttle position solenoid in order to increase the RPM's until the engine warms up to operating temperature.
What clued me in to this was the heater hoses going into the firewall. They were warm near the water pump but cold near the firewall. This led me to speculate that there was a lack of water flow past the thermostat. This lack of flow caused a false temperature reading to the PCM. This false reading led the PMC to think the engine was below normal operating temperature. Therefore, the PCM was trying to keep the engine at high idle until it warmed up.
Until some automotive engineer tells me I'm full of it, that's my story and I'm sticking to it!
Hope this helps.