Hola!
 
Tengo una imagen en png, que es esta.... y tiene un fondo transparente:  
Edito: Ya está solucionado 
... Y al hacer la marca de agua me sale esto: 
Edito: Ya está solucionado 
La función utilizada es esta:  
 Código PHP:
    <?php  
header('content-type: image/jpeg');  
$watermark = imagecreatefrompng('./watermark.png');  
$watermark_width = imagesx($watermark);  
$watermark_height = imagesy($watermark);  
$image = imagecreatetruecolor($watermark_width, $watermark_height);  
$image = imagecreatefromjpeg($_GET['id']);  
$size = getimagesize($_GET['id']);  
$dest_x = $size[0] - $watermark_width - 5;  
$dest_y = $size[1] - $watermark_height - 5;  
imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 40);  
imagejpeg($image);  
imagedestroy($image);  
imagedestroy($watermark);  
?>    
  A ver si alguien sabe el fallo.... 
Un saludo