The boolean operations are just the automated process of finding intersections between objects and using these to split, trim, and join. If you manually do the first step - i.e. finding the intersection curves - you will see where it fails.
Also, when you do this in Rhino 6 you will get more information at which points boolean operations fail. Booleans should also work a bit better in Rhino 6.
I wasn’t aware of the intersection test. Thanks! I created a single turn model of the square helix and tried your idea. Clearly there are missed intersections near the ends of the helix.
I created a wider helix model that penetrated both inner/outer surfaces of the cylinder and that subtracted correctly.
I used grid snap to construct both the cylinder and helix so the ends of the helix should be congruent full circle.
I tried your idea. Here is the taller cylinder with a new revolved square helix with the ends capped. Note that the helix is congruent with the outside diameter of the cylinder, but does not penetrate the inner diameter.
Just a comment on that one…
You are dealing with a tolerance stack here. The helix will be a NURBS curve that is within tolerance of the cylinder. You then use this curve to create another surface - that will be within tolerance of that curve. But chances are that the resulting surface is not within tolerance of the cylinder. That’s why - as Pascal also indicated - it’s better to make sure that your geometry is extending past each other and let Rhino find new edges within tolerance of those surfaces.