Boolean half the time doesn't work but does union?
A Boolean Modifier usually fails for one of two reasons:


Your face normals are pointing in different directions. To the modifier it seems like the mesh doesn't have a clear distinction between inside and outside. Happens often through extrusion. Select all verts and hit CTRLN to recalculate them.
Your mesh isn't watertight. That happens when any edge of your mesh has more (or less) than 2 faces attached to it. Deselect all verts and hit CTRLALTSHIFTM. That'll select most troubling parts. It can be useful  to do this twice, first in Vertex Select Mode, then in Edge Select Mode because the clues from what gets selected are different. If that's the case, recalculating normals won't work either. I usually go paranoid and avoid holes (only one face attached to any edge) as well.