Listo... el problema era en el modo 'borrar' y es que no es seguro modificar la cantidad de elementos de un arreglo desde dentro de un bucle y mantener coherencia luego con el indice.
 
La solucion fue crear un "arreglo de elementos a borrar" y procesarlos al final:    
Código Javascript
:
Ver original<style>
 select{
 height:10em;
 width:7em;
 }
</style>
 
 
<form action="" method="">
    Select 1<br/>
 
    <select name="elementos1" multiple >        
        <option value="tizas" >tizas</option">      
        <option value="zapatos">zapatos</option">       
        <option value="pizarron" >pizarron</option">    
    </select> 
    <p/>
    
    Select 2<br/>
    <select name="elementos2" multiple >        
        <option value="marcadores" >marcadores</option">    
        <option value="mochila">mochila</option">       
        <option value="utiles" >utiles</option"> 
        <option value="pizarron" >pizarron</option">    
        <option value="tizas" >tizas</option">  
        <option value="zapatos">zapatos</option">   
    </select> 
</form>
<p/>
 
<a href="javascript:limpiarSelect1('disable');">Deshabilitar options</a><br/>
<a href="javascript:limpiarSelect1('delete');">Borrar options</a>
    
<script>
    /*
        @param modo 'delete' ó 'disable'
    */
    function limpiarSelect1(modo)
    {
        modo = modo || 'delete';
        
        if (modo!='delete' && modo!='disable')
            throw new Error('Modo incorrecto');
        
        sel1 = document.getElementsByName('elementos1')[0];
        sel2 = document.getElementsByName('elementos2')[0];
    
        conj1 = sel1.getElementsByTagName('option');;
        conj2 = sel2.getElementsByTagName('option');;
        
        var borrar = new Array;
        
        // recorro el primer select 
        for (var i=0; i<conj1.length;i++)
        {   
            // recorro el segundo select    
            for (var j=0; j<conj2.length;j++)   
        
            if (conj1[i].value==conj2[j].value)
            {               
                console.log(modo+' para '+conj1[i].value);
                if (modo=='delete')
                {
                    borrar.push(conj1[i]);                                  
                }else
                    conj1[i].disabled='disabled'
                    
                
            }   
        }
 
        if (modo=='delete' && borrar.length!=0)     
            for (var i=0; i<borrar.length;i++)
                sel1.removeChild(borrar[i]);    
        
    }   
    
</script>