Use _currentWorkItemsCount instead of queue.Count

Locks on the queue itself were causing unpredictable counts (i.e.
sometimes accessing .Count would get locked out by enqueuing threads).

Switched the queue length validation to use _currentWorkItemsCount, which
is manipulated outside the queue lock.