To understand how hashrates are displayed, we need to understand what exactly "hashing" is. Some people know this, some people do not. Some people haven't put the pieces together even if they know it.
What is a hash?
So first, for those that don't know. Hashing is a cryptographic algorithm that's performed on a set of data to derive a unique value. The same data in, will always produce the same hash.
Hashing is used for a number of purposes, such as creating a unique signature. If even one byte of the data changes, the hash value changes radically. An example of a hashed value is your wallet address, which is a long string of numbers and letters. This is not a random value (although it might be the hash of a random value).
What is Mining?
Mining is the act of performing this hashing algorithm on a specific set of data, typically the coin block, plus a number called a nonce. This nonce is incremented for each hash attempt, and this process repeats over and over (10's, 100's, 1000's, Millions of times per second) until a hash value is generated that is less than a certain value (the difficulty). The larger the difficulty, the smaller the hash value has to be, and the longer it takes to find a hash that is small enough.
Finding a small enough hash is like a coin flip contest. If you only have to get heads once, then it's quite easy to do so. If you need to get heads twice in a row, then it takes a littler longer. If you need to get heads 100 times in a row, it may take a very long time. That is, essentially how difficulty affects how quickly valid solutions are found.
Now, if we sent every hash we perform back to the mining pool server, it would quickly overrun our network bandwidth, and the servers bandwidth. So instead, we only send back hashes that meet the difficulty. This is called the Proof Of Work. Mining pools use a smaller "pool difficulty" than the coin network does (called the global difficulty). This allows the mining pool to monitor miners progress and ensure they're working on the problem. The "lesser difficulty" hashes are called "shares", and their only purpose is to prove that a miner is doing work, so that they can get a piece of the reward when one is found.
Ok, are you still with me?
So here's the deal. Your mining software is telling you the rate at which it is PERFORMING the hashing, regardless of whether a valid share hash has been found or not. This is a relatively steady rate, because it's just a raw value for how fast your miner is working. Sort of like the RPM gauge on a car.
If the miner submitted every hash to the pool, then the pool would also display a very steady, standard hashrate, but that would be too inefficient, and use a lot of bandwidth, as well as overload the pool servers. So, to improve efficiency, the miner only submits shares that exceed a certain value. Because of this, the pool website only sees a "share" every so often. The website will calculate how often it's sending you work, and how often you're returning a share, and effectively "guess" at the "hashrate" that it's seeing.
But doesn't that mean i'm not getting paid for all my work?
No. Most, if not all mining pools do not pay you by the Hashrate. You're, paid by the share submitted, it really is irrelevant to how much you get paid as to what the website thinks your hashrate is. It's just a guess, and used for statistical purposes, and for you to get an average for how much you're making.
As I said, you are not paid by the hashrate. You are paid by the number of valid shares you submit.
Ok, so how DO I get paid?
Most pools use one of several pay schemes. One common one is PPLNS or Pay per last N Shares. It's a scheme used to try to encourage pool loyalty, and discourage pool hoppers. Essentially, you don't get paid for every share in this scheme. You only get paid for the last N shares (N being an arbitrary number). If your pool gets lucky on a block, and finds a valid hash quickly, then you are paid for all shares (and maybe even some additional ones). If it's unlucky, then a lot of shares at the early part of the mining are discarded. I won't go into too much detail here, other than that my point is that you aren't necessarily paid for every share you submit.
Ok, so what about BTCPPOOL?
Unlike other pools, BTCPPOOL pays you for every share.
What this means is that the only way BTCPPOOL can fairly pay anyone is simply by the number of shares they submit per time period (minute, hour, day.. etc..).
Once a block is found, you will be paid based on the number of shares you had mined since the last block was found.
Ok, so can we get to the part where the hashrates are different on the web vs in the mining software?
So, if you're still with me. Much like a coinflip, the law of averages says that you will get lucky and unlucky. It may take longer to find a valid hash one moment then it takes to find it another. Since the website only sees when you submit these valid shares, it will often look like your hashrate is going up and down. Over time, it will average out to the same or similar hashrate that miner displays.
TLDR; The website only gets "samples" of your hashrate when you submit a valid share, luck can mean it will show a higher or lower hashrate than the miner shows, but will average out over time.
Thanks to Nicehash for the detailed explanation.We just had to tweek it a bit.