//Is this.Title a new string? or referencing the same string as copy.Title?
This is the same object reference. The exact same string. As strings are immutable, this is fine.
//is this a deep copy or not?
_variables = new Dictionary<String, Variable>(copy._variables);
Check the documentation for this constructor. You'll find that it copies all the elements from the dictionary you pass in. i.e. the two dictionaries are physically different, but they contain the exact same objects as their keys and values.