buenas...
el problema que tienes no es de alcance —scope— de variables. sino que estás creando variables globales que se sobreescriben cada vez que invocas el método del objeto. mi recomendación es que siempre trabajes con variables locales, a no ser que realmente necesites una variable global. utilizando variables locales te evitas posibles fallos como el presente.
Código:
function prototype(id){
this.ID = id;
this.CrearDiv = function CrearDivs(){
var ID = this.ID;
var Capa = document.getElementById('espacioPrueva');
var DivPrueva = document.createElement('div');
DivPrueva.style.width = 200+'px';
DivPrueva.style.height = 200+'px';
DivPrueva.style.margin = '10px 10px';
DivPrueva.style.background = 'hsla(120,100%,50%,1)';
Capa.appendChild(DivPrueva);
DivPrueva.addEventListener("mouseover", function (){
document.getElementById('log').innerHTML ='ObjetoPrueva ' +ID;
}, false);
}
}