Adding quotes around the tokens will fix the problem. Here is why... Your code will eventually be passed to the Mono.CSharp.Evaluator class and be run. But, before that happens, the tokens #{Content.Fields.ContactUsForm.PreferredLocation} are replaced with their values. The values turn out to be of type string. If you don't add the quotes, the string replace will drop the token values right into your code.
This code:
if ( "#{Content.Fields.ContactUsForm.PreferredLocation}" == "North Office") { SetOutcome("North Office"); }
else if ( "#{Content.Fields.ContactUsForm.PreferredLocation}" == "South Office") { SetOutcome("South Office"); }
Will actually be executed as this code when evaluated:
if ( "North Office" == "North Office") { SetOutcome("North Office"); }
else if ( "North Office" == "South Office") { SetOutcome("South Office"); }
One nice benefit of this is you can then tack on any of the string methods you want. ex/ .ToLower(), .Contains(), etc. Here is an example of doing this to help with evaluating the user input. Somewhat frivolous in this case since the data comes from a drop down list.
if ( "#{Content.Fields.ContactUsForm.PreferredLocation}".ToLower() == "north office") { SetOutcome("North Office"); }
else if ( "#{Content.Fields.ContactUsForm.PreferredLocation}".ToLower() == "south office") { SetOutcome("South Office"); }