I got a problem and needed hours but I could crawl in your code and find what was on - it might be a low-priority bug for you though.

The problem roughly comes from the fact that the AbstractView component, when populated the first time, stores the number of items in the View once for all and, after, uses that number when it clears to "remove all the items but the X first ones)
If the added items change (I got this through masking/unmasking), it doesn't remove some generated items and problems begin.

Here is a test-case (the setTimeout looks a bit worked out but simulate a remote-store loading)
Ext.define('Company', {    extend: 'Ext.data.Model',
    fields: [
       {name: 'company'}
    idProperty: 'company'

    var store = Ext.create('Ext.data.ArrayStore', {
        model: 'Company',
        data: []
    var main = Ext.create('Ext.view.View', {
        renderTo: document.body,
        width: 750,
        height: 400,
        border: false,
        store: store,
        itemSelector: "div.thumb-wrap",
        tpl: '<tpl for=".">'+
                '<div style="margin-bottom: 10px;" class="thumb-wrap">'+
    setTimeout(function() {
        store.add({company: 'American International Group, Inc.'});
    }, 200);
As I said, the problem is in the way of dealing with "external" component in src/view/AbstractView.js line 436
if (me.refreshCounter) {                me.clearViewEl();
            } else {
                me.fixedNodes = targetEl.dom.childNodes.length;
                me.refreshCounter = 1;
(So, once refreshCounter is set, it is never unset and clearViewEl uses the fixedNodes value)
A solution would be to wrap the viewed records in a DIV and just wipe it clean when needed while letting other parts adding and removing items before or after.