Boolean operation on meshes is one of the hardest problems problems in computational geometry. Considering that, the result you got on your first try is quite good. If you increase your mesh resolution then you may get acceptable results. You can also try Roemer’s Boolean filter implementation (Adding Roemer's Boolean Filter as a Remote Module) and you may find a few other relevant discussions on this forum (search for words like Boolean, intersection).