I'm not going to go through it in detail, but I had a quick look at your USB 2.0 tutorial and I noticed the following:
1) Your diagram showing the endpoints connecting to the configuration descriptor is wrong. Endpoints are owned by the interface descriptor and there can be multiple interfaces per configuration descriptor.
If you want a real world example of that, have a look at the descriptor setup for a CDC based serial port.
2) From your document: | Thus EP1 IN will be addressed as 0x10 and EP1 out will be addressed as 0x18
That is wrong; you have the nibbles reversed.
3) You need to distinguish between a control endpoint protocol stall and the "something has gone badly wrong" :-) stall.
Protocol stalls are normal and expected; a search of your document does not show the phrase "protocol stall" anywhere.
Hope this helps,
Simon Clubley, clubley@remove_me.eisner.decus.org-Earth.UFP
Microsoft: Bringing you 1980s technology to a 21st century world