The issue issue manifest itself on a version of GXT 2.0-m2 built on May 19th, under MacOS X, GWT 1.6.4 in Hosted Mode (safari agent). From the stacktrace and the nature of the bug, it's likely that it is plaform independent.

In the test case below, a Grid is constructed, with a backing ListStore. A filter is added to the store.

If you attempt to add or update an item on the store and that item would end up being filtered out, an exception occurs (depending on sequence of calls, an ArrayIndexOutOfBoundsException or a NullPointerException). This clearly seems to be a bug, as the add should succeed, the item should be filtered out, and the grid should stay unchanged.

To reproduce using the test case below:

Click on "Add Red Item" first. Everything works fine.

Reload the app.

Click on "Apply Blue Filter"
Click on "Add Red Item"

You will get the exception.
Code:
public class Test implements EntryPoint {

    StoreFilter filter = new StoreFilter<ModelData>() {
        public boolean select(Store<ModelData> modelDataStore, ModelData parent, ModelData item, String property) {
            return ("blue".equals(item.get("color")));
        }
    };

    ListStore<ModelData> store = new ListStore<ModelData>() {{
        add(new BaseModelData() {{ set("foo", "a foo"); set("bar", "a bar"); set("color","blue"); }});
        add(new BaseModelData() {{ set("foo", "b foo"); set("bar", "b bar"); set("color", "white"); }});
        add(new BaseModelData() {{ set("foo", "c foo"); set("bar", "c bar"); set("color", "blue"); }});
        addFilter(filter);
    }};

    public void onModuleLoad() {

        VerticalPanel panel = new VerticalPanel();
        panel.setHeight(400);
        panel.add(new TestGrid());
        panel.add(new Button("Apply Blue Filter") {{
            addListener(Events.OnClick, new Listener() {
                public void handleEvent(BaseEvent be) {
                    store.applyFilters(null);
                }
            });
        }});
        panel.add(new Button("Add Red Item") {{
            addListener(Events.OnClick, new Listener() {
                public void handleEvent(BaseEvent be) {
                    ModelData redItem = new BaseModelData() {{ set("foo", "red foo"); set("bar", "red bar"); set("color","red"); }};
                    store.add(redItem);

                }
            });
        }});
        
        RootPanel.get().add(panel);
    }

    class TestGrid extends LayoutContainer {

        Grid grid;

        TestGrid() {
            setHeight(300);
        }

        @Override
        protected void onRender(Element parent, int index) {
            super.onRender(parent, index);

            grid = new Grid(store, new ColumnModel(Arrays.asList(
                    new ColumnConfig("foo", "Foo", 100),
                    new ColumnConfig("bar", "Bar", 100),
                    new ColumnConfig("color", "Color", 100)
            ))
            );
            grid.setAutoHeight(true);
            add(grid);
        }
    }
}