Can I, without locking, safely call List.AddRange(r) from multiple threads? If not, what sort of trouble would I run into?
No, its documentation does not say it is thread safe, therefore it is not.
Public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
As to what can go wrong, think about what AddRange(newItems) does:
Now think what will happen if the above is mixed up with another call to AddRange() or even just a call to read an item.