Two quick things:
- Make sure you spell the attribute names right (gpOptions and gpLink; not case sensitive)
- Make sure they aren't null. If you call ToString on the .Value property and the attribute value in the directory is empty, you'll get this exception. You should test for null first.
If you are sure the attribute is populated on the object with the DN you are using but you can't read it after correcting spelling, then the likely issue would be permissions. Users who don't have permissions to read an attribute experience that as if the attribute value does not exist at all. Hopefully that's not the issue.