Você pode fazer uma variavel booleana com valor inicial true; você executa o Innerhtml so se essa variavel for true, e dentro disso, atribui a ela o valor false. (so executará uma vez). Mudei seu codigo para melhor desempenho: se quiser testar está aqui a página: <html>
<head>
<script>
//------------------- V A R I A V É I S -------------------
ica=30;
ic=30;
i=50;
j=50;
inicial=true;
var timec,
timerc,
caixaaa,
caixaab,
caixaba,
caixabb;
//------------------- F U N Ç Õ E S ------------------------
function fundoa(){
if(inicial){objetop.innerHTML='<img src="onca.jpg" id="imga"/>';inicial=false;}
objetop.style.opacity=i/100;
objetocaixa.left=ic+"px"; //Compatibilidade
if(ic>=30)ic-=14;
if(ic-30<5)ic=30;
if(i<=100){i+=5;setTimeout("fundoa()",50);}
else{inicial=true;i=50;setTimeout("fundob()",3500);}
}
function fundob(){
if(inicial){objetop.innerHTML='<img src="onca2.jpg" id="imgb"/>';inicial=false;}
objetop.style.opacity=i/100;
objetocaixa.left=ic+"px";//Compatibilidade
if(ic<=182)ic+=14;
if(182-ic<5)ic=182;
if(i<=100){i+=3;setTimeout("fundob()",50);}
else{inicial=true;i=50;setTimeout("fundoa()",3500);}
}
</script>
</head>
<body onload="objetop=document.getElementById('p');objetocaixa=document.getElementById('caixa').style;fundoa()">
<p id="p"></p>
<img src="caixa.png" id="caixa"/>
<img src="onca.jpg" id="img1" />
<img src="onca2a.jpg" id="img2" />
<style>
.fundo{position:absolute;}
#imga{position:block;}
#imgb{height:266px;width:422px;position:block;}
p{height:500px;
width:650px;
border:1px solid gray;
border-radius:5px;
background:black;
}
#caixa{position:relative;border:1px solid transparent;height:111px;width:153px;z-index:2;margin-top:-9px;opacity:0.8;}
img{border:1px solid gray;margin-top:30px;margin-left:40px;
}
#img1{margin-top:1px;margin-left:-125px;height:100px;width:151px;position:absolute;z-index:1;border-radius:7px;}
#img2{margin-left:30px;margin-top:1px;height:99px;width:150px;position:absolute;z-index:1;border-radius:7px;}
</style>
</body>
</head>