When I add a mirror modifier it sometimes doesn't mirror correctly, giving me an overlapping mesh. How can I fix this?
The reason you're getting an overlapping mesh is because the Origin point of your object is offset from the center line of your model. The Mirror modifier uses the origin to determine the symmetry line, so to fix the overlap, you need to move the origin back to the centerline of your mesh.
You can do this one of two ways.
You can move the mesh manually back to the center by grabbing it in Edit Mode and moving it along the respective axis (in this case the X-axis) until the center vertices are lined up with the object origin.
This is not generally an ideal method, though, as it can be difficult to aline the center vertices perfectly without employing other steps. I recommend method #2.
The second way to correct this problem is to move the object's origin back to the center of the object. You can do this in a couple steps:
1. In Edit Mode, select the center vertices and press Shift + S and choose Cursor to Selected.
2. Next exit Edit Mode with Tab.
3. Now press Ctrl + Alt + Shift + C choose Origin to 3D Cursor.
4. Problem solved!
What you need to keep in mind is how the object origin moves. Anytime you move the object in Object Mode the origin will move with the object.
However, anytime you move the mesh in Edit Mode the origin will stay put. The reason for this is because moving the mesh is not actually moving the object, you're simply moving the data that belongs to the object.
You can also add an Empty and place it where you would like the mirror to be, then set the mirror object variable to that empty. But keep in mind it is convenient to use the origin as a mirror point for most simple mirror behaviour.
I coded an 'add empty at selected vertex' script a while back, it's pretty handy.