Did you find a solution to this? I'm having the same issue.
I have an image file of a "moon" textured to a plane, with a mask in the transparency. The idea is to only see a round moon but when I render in either surface or lambert shaders, there is a slight opacity visible in the part that's supposed to be empty.
I have to point out that when I do this in Lambert, this problem only happens when the image is mapped to the incandescence. Mapping to color gives a clear cutout. However, since this is a "moon" it should match the original image file. One solution is to map to color instead of incandescence and link it to its own light. Another workaround I found was to multiply the mask file with the image file and link them to incandescence while also linking the mask to the transparency. Not sure why this works but it seems to do the trick.
BUT, I still would like it to get it to work with a surface shader at least for the principle. It seems like such a simple logical procedure (image+mask=cutout) but for some reason it doesn't work.