Thanks for a great article which clearly explains the balance between isolation and concurrency. I have had to make extensive use of (NOLOCK) in reports to obtain good conurrency because the application I support creates uncommitted transactions every time you open a new form.
I understood from BOL that locking hints were HINTS, and that SQL Server 2000 will ackonwledge them, but will override the hint and select a more suitable level of lock granularity if the operation demands. So selecting WITH (ROWLOCK) when you are updating the majority of rows in a table is likely to be overridden in favour of page or table locks.
If it ain't broke, don't fix it...