Check for exhaust in the coolant...
I had an overheating problem in my D90 and did everything but pulling the heads, even checked for exhausting in the coolant several times (ie head gasket leak). One day I was stopped at the local LR shop to pickup something and left the engine running. I was getting ready to pull away when the mech came out and told me I was dumping coolant, the temp gauge wasnt showing a high temp. The motor at undetermined times would develop a head leak on from the exhaust and pressurize the raditor blowing all the coolant out, the engine would then overheat because of no coolant. There was no coolant in the exhaust or exhaust in the coolant.
I would proceed in this order: Use a laser thermometer to look for hot/cold spots in radiator (recore/replace if problem found), change T-stat and coolant, check sensor/gauge/electrical, check fan, look for exhaust in coolant and coolant in exhaust and lastly pull heads.