Pool hopping is the practice of moving your miners between multiple different pools based on which pool has completed the least number of shares towards its current block. By doing this you increase your chances of getting overpaid on so-called "short blocks" while simultaneously ensuring that you're never stuck on an unlucky pool as they spend many times longer than average working on a so-called "long block"
It's controversial because, in theory, hoppers are "stealing" coin from people who remain dedicated to the pool by participating only when it suits them rather than when it helps the pool. There are a number of methods pools can and have used to combat hopping, such as using a non-proportional or time-shifted algorithm or even by refusing to publish or simply delaying their stats to make it more difficult to find how far into a block they are.
On the other side, it's also argued that pool hoppers bring considerable hashing power to bear on whatever pool is luckiest at the moment, which both allows these pools to publish higher overall hashrates (thus attracting more miners) and increases their chance to have "short blocks" a more substantial portion of the time. I'm not sure if any meaningful analysis has been done to show whether the increased number of blocks found from hopping outweighs the amount of coin the hoppers "steal" from the pool.
In any case, it is on the pools to allow or prevent hopping and it is on the user to select a pool with a payout system appropriate for his or her mining style.