Как правильно выводить массив изображений canvas?
Вместо repaintPanel добавьте
colors.forEach(e=>{
  let img = new Image();
  img.src= e.img;
  img.onload = function(){
      e.isLoaded = true;
      if(colors.every(e1=>e1.isLoaded))        
        repaintPanel();
  }
});
P.S. А вообще реализация через setInterval просто ужас, сделайте один игровой цикл и используйте requestAnimationFrame или setTimeout на худой конец
Первое что попалось, ознакомтесь если понятия не имеете что это такое
Проблема в том, что если присвоить в свойство src объекта Image новый url, то картинка не появится там моментально, она будет загружаться в фоне. Соответственно нужно дожидаться загрузки через событие, прежде чем рисовать.
Ну и еще совет, если грузить картинки паралельно, каждую в свой Image, то будет быстрее.