Hmmm... You are doing everything right. Using snap is as good at it gets. I think it is an issue with the program. I'd contact Brian or Art and send them the files you are using. I know when importing, sometimes I set tolerance as low as 0.01 even though I'm using clean geometry drawn correctly. When I hit the autoclean button I'll see if LazyCam joined the chain I want. If not I'll hit it again and it gives me a different result. It toggles back and forth between the options. You can see this in the rapid lines as well as by clicking on the tool path. I don't know about 2.47 version... but the approach works good for 2.02 LazyCAM.
Another suggestion... For me, I've had to learn to edit G-Code. It isn't that hard to do and there are many tutorials available on line to help you. In your case, all you have to do is find the command that is moving the cutter up. You can do this by watching a simulated run in Mach3 and jotting down the line number. It should look like g0 z (height in mm). Use Notepad to kill that command and your cutter will stay down. Learning G-Code has other benefits too like making subroutines to cut parts out using many shallow passes -or- cutting the same part in many locations for real production work.
Another suggestion, lower the rapid movement height to just slightly above your work surface. Let's say your surface is at 0 mm and you want to cut to a depth of -2 mm. Set your height that the cutter moves from toolpath to toolpath to 1 mm. This won't keep the cutter from wasting some time, but it will decrease the amout of time it wastes.
Hope this helps.