David,
This is not as bug. It is how VFP optimizes a select command. If it can, VFP will simply use the table again in another work area and set a filter on it.
Now,why is there an error when VFP uses the filtered table. Because a cursor created with SELECT is read-only and creating an index causes a write operation to the dbf header for the view. When you use notfilter you have a temporary DBF that has no indexes on it and you can create one index tag. Attempting to create a second one will give you the read-only error. When VFP has used the table again and the table has an index, then your index command is trying to create the nth index tag and cursors for SELECT only allow one tag.