The network hash rate is a computation based off of the difficulty using the average time of the last 120 blocks.
Span S = Block120Time - BlockTime1Time
AveTime = S 120
HashRate = Difficulty * 2^32 AveTime
It is not showing the current network hashrate. It is only, and always has been, a computation based on the difficulty and average time, and is only an estimate. It doesn't show what is happening now, but an average over the last two hours. It will appear to pop during lucky streaks or increase in hash rate over the last 120 blocks as the difficulty goes up. Because it is based on a longer time frame if we have a bunch of hash and then much less it takes awhile to correct. Once the amount of miners stabilizes for a longer period of a time, so will the network hash rate. As long as we have people hitting us and leaving us it is going to keep bouncing around with the difficulty changes.
Improved yes, working kind of.

I am still seeing some weird hashrates, 20+ every few hours, even more often.
What is your explanation for that!