Off the top of my head without attempting it, I'd probably do what you did and have seperate puzzle pieces to define the shapes, then use those pieces as a mask to show parts of the image.
The problem with this is, for a 1024x768 image for example, that if you had 10 puzzle pieces, then you'd need 10x 1024x768 images.
Without trying, it's hard to say if there's a better way as I haven't messed with masks in C2.
I guess you could create several canvas objects and paste each masked shape into those to cut down on multiple full images.
If you can't figure it out, I might have a bash tomorrow when my mind is more fresh.