Firstly, it should be noted that the first line of your post is misleading, incomplete and inaccurate. Value-types can be pretty much anywhere.
In our example, a value type is contained within a reference type.
the "contained within" here is misleading. The "contained within" you are conflating this with is "instance fields". This does not apply to method local variables. Method local variables, as an implementation detail, live on the stack... except for when they don't! Which includes iterator blocks and captured variables. Since you haven't mentioned either of those things, the answer is probably "on the stack".
I should also note that even for method local variables that are reference types, the variable (i.e. the reference, not the object) still lives on the stack (except for when it doesn't, exactly the same rules).
Note in the above that I'm limiting the discussion to what happens in IL terms, i.e. what the C# compiler does. Hans is quite correct to say that the JIT may do whatever it wants with the IL when it sees it.