I was able to take the test suggested by @moodmosaic from RandomNumericSequenceGenerator and author a version that consistently fails without locking and passes with proper locking.  I used the ReaderWriterLockSlim as suggested, but since it implements IDisposable, I had to implement the Dispose pattern on RandomRangedNumberGenerator to eliminate the errors from the BuildRelease script.  I could definitely be wrong on this point, but I believe Dispose is not considered thread-safe in its typical implementation so I need to pursue locking within Dispose to prevent an issue there.  If that's true, it seems like I'm going to end up simply using a lock in Dispose when I could have just done that in the first place and saved a ton of extra coding.  Is that right or where am I getting off track?