Boolean Difference with Bevels
Boolean usually is an approximation of the result you are expecting. It has some flaws by default and has a hard time dealing with two geometries that perfectly overlap, non-manifold geometry, etc. It also has a hard time dealing with n-gons which often occur on beveled meshes and meshed text-objects. 

A good way to start is feeding triangulated geometry into the boolean modifier and leaving a good amount of space in between the meshes you are trying to difference from one another. This way the geometry is unique and cannot be interpreted in multiple ways by the boolean modifier.

I personally look at boolean as the absolute last method to achieve any desired geometry. I only use it if any other solution fails. It does not output clean and predictable geometry and usually needs a considerable amount of clean up. 

e.g. you could solve your first shape like this: