What you describe is how it is supposed to work. Ideally, when someone selects an age or grade, the list should be prefiltered to include those. In this case, based on that logic, it simply isn't working properly. This registration was something like third grade, age 8. The criteria matched a bunch of different schools in the crosswalk.
Grade and age were designed to be the two data inputs that sorted things during the registration process. During the test pilot, we were dismayed to learn from BJ that they were exclusive- using both age and grade together wouldn't work (we were trying to use age to sort into a program and grade to sort into a test). I am suspicious that the interaction of these two inputs is causing this behavior.
I tested by deleting the fields (independently) from the crosswalk, but not by disabling one or the other from the registration screen, as I was dealing with our live production instance.