Is there anyway I can boolean a smoothed surface without making it look deformed?
You have to use an edge split modifier to make the newly created edges sharp.

If this doesn't help, try using Blender 2.8 the boolean operation got improved.