Vaya, me volvi loco y al final consegui cargar cuatro capas con un código sencillo, pero mi objetivo era cargar la imagen en base a unos valores. 
 
Curiosamente si el valor llega por $ lo acepta, pero me pasa lo siguiente 
 
$torn = "tornilloplata.png";   //ASI FUNCIONA A LA PERFECCION
//$torn = $tornillo2;               // ASI PASA DEL TEMA, NO LO LEE
 
He probado 1000 posiciones, con comillas, sin comillas, la Query funciona a la perfeccion, la saco unas lineas antes y vero resultado. 
 
$imagen4 = imagecreatefrompng($ruta.$ResultQuerytornillo[fotoprod]);
 
 Intuyo que mi ignorancia y las exigencias de las librerías me quitan el sueño, espero alguien de con la solución
 
 $tor=8;
$Querytornillo = 'select fotoprod from productos where codprod='.$tor;
$IdConsultatornillo = mysql_query($Querytornillo, $IdConexion);
$ResultQuerytornillo = mysql_fetch_array($IdConsultatornillo);
$tornillo2 = $ResultQuerytornillo[fotoprod]; 
print $tornillo2 ;
 
$ruta="images/media/";
$pie="piedrascromo.png";
$fron ="frontalfuego2.png"; 
$llama ="llamaazul.png";
$llam =$llama;
$torn = "tornilloplata.png";   //ASI FUNCIONA A LA PERFECCION
//$torn = $tornillo2;               // ASI PASA DEL TEMA, NO LO LEE
 
$tornillo = $ruta.$torn;
$piedras = $ruta.$pie; 
$frontal = $ruta.$fron; 
$llamas = $ruta.$llam;
 
 
$imagen1 = imagecreatefrompng($llamas);
$imagen2 = imagecreatefrompng($piedras);  
$imagen3 = imagecreatefrompng($frontal); 
$imagen4 = imagecreatefrompng($tornillo);
 
 
 
$fondo = imagecreatetruecolor(600, 300); 
 
imagecopy($fondo,$imagen1,0,0,0,0,600,300);
imagedestroy($imagen1);
imagecopy($fondo,$imagen2,0,0,0,0,600,300);
imagedestroy($imagen2);
imagecopy($fondo,$imagen3,0,0,0,0,600,300);
imagedestroy($imagen3);
imagecopy($fondo,$imagen4,0,0,0,0,600,300);
imagedestroy($imagen4);
 
// Damos salida a la imagen final  
header("Content-type: image/png");  
imagepng($fondo);  
 
// Destruimos ambas imágenes  
  imagedestroy($imagen1); 
imagedestroy($imagen2); 
imagedestroy($imagen3); 
imagedestroy($imagen4);  
   
 

 
 

