For the scenario when you are the one triggering the second ItemUpdating by changing item values you can use the EventFiringEnabled parameter (you should use a try - catch -finally around it):
this.EventFiringEnabled = false; // Do the changes item.Update(); this.EventFiringEnabled = true;
The other scenario is tougher, and the reason behind why I use ItemUpdated instead when ever possible!
You could check the BeforeProperties, ListItem and AfterPropertiesin your ItemUpdating event receiver to check if there is updates being made that you have to take action on. If not, then just return.
Here is a guide for when you can use .BeforePropertiesand when you should go in the .ListItem instead