You double the final consonant in a word if both of the following are true:
- The last three letters take the form of consonant, vowel, consonant.
- The last syllable of the word is stressed or the word is only one syllable.
In these cases, doubling the last letter is done in practice to ensure that the new word does not adopt new phonetic qualities. "Hop" is a great example, where failing to double the consonant would produce "hoping" and "hoped"--very different words, both semantically and phonetically!
Other examples include:
refer - referred
remit - remitted
occur - occurred
Like all good English rules, there are exceptions to this.
- If the last consonant is "c" and the word otherwise fits the above words, you typically don't double it. Instead, you add "k". Example: "mimic" becomes "mimicking".
- If the last consonant is a "w" or "x", you don't double it. The reason for this goes deep into the history of these letters. Example: "fix" becomes "fixed" and "blow" becomes "blowing".
- You also do not double if the last letter is "y" (because the preceding vowel and the "y" pronounced together finish with a vowel sound). This is less to do with the history of the letter and more to do with the history of phonetics and spelling in English. Example: "key" becomes "keyed".
Lastly, the one rule I know of that's different in British English than American English:
- In BRE, if a word fits the ending in consonant, vowel, consonant pattern, ends in "l", and the last syllable is not stressed, you double the "l" anyway. For example, "travel" in American English becomes "traveled", while in BRE it becomes "travelled". At the same time, "propel" becomes "propelled" in both American English and BRE.
English is a wacky language, so please don't completely trust any set of rules when deciding the right way to write a word. Rules like these can be a helpful guideline, but if the thing you are writing is important and you're in doubt, take a short moment to look up the correct form.