Yes, absolutely. This is guaranteed by the C# spec, section 10.12. I'm trying to find a more explicit bit which talks about threads, as that section only guarantees that it will be executed once.
Note that if you have a sort of "recursive initialization" setup, you can still end up executing code in a class before it has been fully initialized - and if two static constructors depend on each other, then you can end up with a deadlock if each class is initialized in a different thread.
Also note that the presence of an empty static constructor can affect the timing of static field initializers - if you don't have a static constructor, that gives the CLR more leeway over when the field might be initialized. (The actual behaviour has changed over time, but always within the specifications.) See section 10.5.5.1 of the spec for more about static field initializers.
Basically, keep static constructors simple and self-contained as far as possible.