So everything I have read so far deals with engines overheating at idle or becuase someone has changed their thermostat and improperly bled the coolant system. This is actually a little more fun than that so I hope someone can help me

I have a 99' e46 323i. In the summer it never overheats. Now it's cold (freezing) in Pittsburgh and my coolant temperature gauge is always reading cold when I'm driving around. If i turn the engine on and let it sit the coolant temperature gauge will rest in the center with no problem. But, once i take it out for a spin, again the temperature gauge will show coolant is getting cold. I thought that replacing the thermostat, flushing the system, changing the coolant and bleeding the system would fix the problem. NOPE!!!! It did not!!!! When it's really cold outside and I'm driving around that darn coolant temp gauge hangs out near the blue and then somtimes things get really interesting: It will show that the engine is overheating in the blink of an eye. The heat in my car works somewhat but the colder it gets outside the less heat I have in my car. In the summer the heat works great (HA HA) and I have no problems with my air conditioning in the summer either. What gives? any ideas????????