This is called a fleeting/mobile vowel which historically formed during the [Fall or the Jers][1].

There are no strict rules but some patterns stand out:

* Nouns ending in **-ец**: конец, палец, боец - конца, пальца, бойца;
* Nouns ending in **-ок/ёк**: замок, зверёк, чаёк - замка, зверька, чайка;
* Nouns ending in **-ей**: муравей, воробей, улей - муравья, воробья, улья;
* A few odd ones: лев - льва, орёл - орла, мох - мха, вошь - вши, весь - всего, угол - угла.

Feminine and neuter nouns may get a fleeting vowel in **genitive plural**:

* consonant + **ка**: кошка - кош**е**к, банка - банок, селёдка - селёд**о**к, койка - коек;
* consonant + **ня**: вишня - виш**е**н, башня - башен, деревня - деревень; 
* consonant + **ья**: семья - семей, статья - статей, судья - судей;
* consonant + **ьё**: ружьё - руж**е**й, копьё - коп**и**й;
* **-йна**: война - воен, тайна - таен;
* **-сло**: масло - мас**е**л, ремесло - ремёсел;
* Odd ones: яйцо - я**и**ц, кукла - кукол, серьга - сер**ё**г, кочерга - кочер**ё**г.

The general rules are:

 1. A fleeting vowel can only appear between two consonants (**й** being a consonant).
 2. A word has a fleeting vowel only if the ending is null or begins with a consonant: люб**о**вь (null) - любви (vowel) - люб**о**вью (consonant).
 3. If there is more than one consonant or **щ** to the left of a fleeting vowel, the fleeting vowel is kept in all forms: гон**е**ц - гонца, but бегл**е**ц - бегл**е**ца.

Outside of these patterns telling if a a word has a fleeting vowel is difficult: 

 - ветер - ветра 
 - катер - катера

When in doubt, use a dictionary or [this tool][2].


  [1]: http://russianmentor.net/gram/mailbag/topics/phon2.htm
  [2]: http://morpher.ru?s=%D0%B2%D0%B5%D1%82%D0%B5%D1%80