Seems inevitable that the picked-up stitches are always larger than you like. I fix this by... knitting in the back of the loop, thus twisting the stitch. This seems to take up the slack okay.
For holes, let's see. When you pick up the stitch along the edge, do you "go deep" and get at least 2 strands from the edge before you make the pick-up stitch? Or do you just take one strand? If one strand, that does guarantee holes, as well as a weaker join.