How to use Boolean Operations to create Windows in a Mesh?
I was having this problem yesterday. 
When you do booleans with a lot of round surfaces you can get these problems.
Check that your normals are facing the right way. Try to line up vertices through rotation or extra subdivisions and then re-mesh afterwards. Also make sure to remove double vertices.
It's also nice to have a linked duplicate, of the cut out, off to the side to modify.

As for a fix, Try this: