In the code
Private Sub TileSet1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TileSet1.MouseUp
Dim x As Single = e.X
Dim y As Single = e.Y + 28
Remove the "+ 28" from the 3rd line. That's why you're getting the wrong tile.
As for your second problem, your "CopyTile" function only requires a source rectangle, and does not allow you to specify the source coordinates for the BitBlt operation.
You are using
BitBlt(HDC2, 0, 0, rect.Width, rect.Height, HDC1, rect.X, rect.Y, 13369376)
And as you can see, you're specifying the coordinate 0,0 as the destination location for the bitblt. 0,0 is the top left corner.