I think you're confusing the concepts of "visitors" and "users" in Sitecore. In the Sitecore DMS a "Visitor" is essentially a cookie on a machine which maps to an entry in the Visitors table of the analytics database. A named User is someone who is logged into Sitecore and is stored in the .NET membership table in the core database. When you add a tag to a visitor this adds an entry to the VisitorTags table which is basically just a name-value pair which is mapped to the visitor entry in the Visitors table. In your case "salesforce\fred.smith" is not a Visitor but a User. You can retrieve the current visitor using Sitecore.Analytics.Tracker.Visitor or you can retrieve a different visitor by ID using the VisitorFactory. If alternatively you do want to persist data against a user, you can use the Users profile, which is again different to DMS and visitor profiles. You will find the relevant classes for Sitecore users under Sitecore.Security.
Edit: I would do what you want in the following way:
//Enroll user in plan
VisitorManager.AddVisitor("salesforce\\fred.smith", new ID("{67F395B9-2C29-4B73-9382-69E0FCB6A546}"));
//Add data to USER profile not visitor
Sitecore.Security.Accounts.User user = Sitecore.Security.Accounts.User.FromName("salesforce\\fred.smith", true);
user.Profile["opportunityId"] = "006M0000004xnLh";
//Get user from automation action parameter and get data from profile
Sitecore.Security.Accounts.User user = Sitecore.Security.Accounts.User.FromName(automationStatesRow.UserName, true);
string data = user.Profile["opportunityId"];