Select field has createList function that creates List of options, which is configured with hideOnMaskTap: true. If a user taps one of the items in this List, it gets hidden and destroyed properly. However if a user taps on a mask, the list gets hidden but is never destroyed and therefore stays in DOM forever.

Proposed solution in Select.js (the changes are highlighted in red):
Code:
createList: function() {
        return new Ext.List({
            store: this.store,
            tpl  : [
                '<tpl for=".">',
                    '<div class="x-list-item">',
                        '<span class="x-list-label">{' + this.displayField + '}</span>',
                        '<span class="x-list-selected"></span>',
                    '</div>',
                '</tpl>'
            ],
            cls             : 'x-select-overlay',
            itemSelector    : '.x-list-item',
            floating        : true,
            stopMaskTapEvent: true,
            hideOnMaskTap   : true,
            singleSelect    : true,
            
            listeners: {
                selectionchange: {
                    fn: this.onListSelect,
                    scope: this
                },
                hide: function() {
                    this.destroy();
                }
            }
        });
    },

    onListSelect : function(list, node, records) {
        var me       = this,
            selected = records[0];
        
        if (selected) {
            me.setValue(selected.get(me.valueField));
            me.fireEvent('select', me, me.getValue());
        }
        
        me.list.hide({
            type: 'fade',
            out: true
            
// This is not needed because the list gets destroyed by its own hide event
//          after: function() {
//              me.list.destroy();
//          },
//          scope: me
            
        });
    },
Something like this. It should to the trick although I haven't personally tested it