Ho risolto, osservando meglio il programma di esempio ho riscontrato delle differenze insignificanti, ma che evidentemente avevano il loro peso.
Ecco il nuovo codice:
	codice:
	    class ClassWatermark
    {
        public static void Main()
        {
            Image img1 = Image.FromFile("D:\\temp\\x.jpg");
            Image img2 = Image.FromFile("D:\\temp\\logo.gif");
            Bitmap bmp = new Bitmap(img1);
            Bitmap logo = new Bitmap(img2);
            Graphics canv1 = Graphics.FromImage(bmp);
            Color col;
            int py=0;
            int px=0;
            for (py = 0; py < logo.Height; py++)
            {
                for (px = 0; px < logo.Width; px++)
                {
                    col = logo.GetPixel(px, py);
                    logo.SetPixel(px, py, Color.FromArgb(128, col.R, col.G, col.B));
                }
            }
            logo.MakeTransparent(logo.GetPixel(0,0));
            px = bmp.Width - 70;
            py = bmp.Height - 90;
            canv1.DrawImage(logo, px, py, 60, 80);
            bmp.Save("D:\\temp\\xnew.jpg");
        }
    }
 
La differenza sta nel fatto che prima caricavo i file direttamente come Bitmap, ora prima li carico come Image, poi li passo ai Bitmap.
Devo poi aggiungere qual'è il pixel campione per definire la trasparenza (logo.MakeTransparent(logo.GetPixel(0,0))
.
Spero le mie esperienze servano a qualcuno, ciao!