In case anyone's following this, a final update:
I got this working the way I want. Two things were involved, both kinda sorta related to double-buffering principles, but not exactly. First, I solved the issue of the small image background redraw ("glassy effect") by changing code that looks like this:
If e.Button = MouseButtons.Left Then _
myPictureBox.location = New Point(newX, newY)
to this:
If e.Button = MouseButtons.Left Then
dim b as Bitmap = theTransparentBitmapIveBeenUsing
b.MakeTransparent() ' Make it transparent AGAIN
myPictureBox.Image = b ' reassign it to my image
myPictureBox.location = New Point(newX, newY)
end if
I just stumbled on this. Something about redoing the (pseudo) transparency at this point, just before the image is moved, causes the background (understand that "transparent" backgrounds in .NET/GDI+ are NOT "transparent"; they have a "background" equal to whatever parent pixels are behind their rectangle, so they "appear" transparent ... sometimes) of it to be painted at a more appropriate point, or to take advantage of the basic double-buffering I set up for the whole form. Whatever the case, it works.
The other issue I solved was also related to this psuedo transparency, and was much more complicated to fix. Because "pseudo-transparent" images aren't transparent, when one picturebox with a such an image overlaps another, it's really obvious. You can clearly see they have backgrounds when this happens, because the background of the one in front obscures the one beneath. It happens because the image of these little pictureboxs isn't part of the parent background. The solution to this is to "burn them in". For this I had to use GDI+ drawing calls and so forth, which I was hoping to avoid. The principle is like this: First, use a double-buffering "_backbuffer". Make a copy of an "empty canvas" and hang on to it. When a tranparent background picturebox is created on the parent (background) picturebox, DRAW a copy of it right on the background, at the same location where transparent background picturebox is placed. It goes like this:
dim g as graphics
g = Graphics.FromImage(backgroundPictureBox.Image)
g.DrawImage(myPictureBox.Image, leftPos, topPos)
g.Dispose()
So now I effectively have 2 images of myPictureBox.Image on the main background: The one in the pictureBox control, and one I've drawn right on the background. If I was to drag the picturebox without accounting for that, you'd see the one I "burnt in". But it needs to be there, so that if I overlay it with another pictureBox image, the pixels that make it up will show through to the "pseudo transparent" background of that 2nd image.
Anyway, it's no good to leave that drawn one there if I move the pictureBox, and that's where the _backbuffer comes in. It has the pixels that were in that location before I drew on them. In the mouseDown for that pictureBox I just have to replace the new pixels with the old ones, like so:
Dim bFrom As New Bitmap(_backbuf)
Dim bTo As New Bitmap(backgroundPictureBox.Image)
Dim g As Graphics = Graphics.FromImage(backgroundPictureBox.Image)
Dim r As New Rectangle(leftPos, topPos, w, h)
g.DrawImage(bFrom, r, r, GraphicsUnit.Pixel)
That's it. This code paints the original background, saved in _backbuf, back on to the "live" picturebox image in the rectangle covered by the pictureBox that was mouseDown'd.
Now, these principles could be really basic for game programmers and animation specialists ... but I'm not one. VB 6 let me accomplish all this with no code by simply dragging around transparent .GIFs in Image controls.
It took me over 12 hours to simulate this very basic behavior in .NET, which I'd set up in 20 minutes in VB 6. That's certainly not enough of a reason to NOT move to .NET, but it is something to be aware of. The loss of the Image control, and changes to PictureBox, etc ... can really cause some headaches.
Anyway, in closing, I'm going to give RiverGuy a star for being the only one to respond. Also, even though it wasn't the exact answer I was looking for, it got me on the right track. Thanks, dude.