Smoothing
Scott, you might try starting with objects that have more faces in them — this
may help your boolean objects retain the shape(s) you are looking for.
Tesselate them before booleaning. After the boolean operation, do some
Surface/Smoothing/Object/Auto Smooth ops with varying degrees of smoothing to
get the desired surface on your finished object. Use Optimize, or Gus's
recently UL'ed real-time G-Shaded viewer to quickly check your model during the
processes.
-Alan