This comes from the "Captain Obvious" department, but took me a few minutes nonetheless. When running a utility application (which will probably be the next post), SPFarm.Local didn't throw any exceptions but simply returned as null.
A quick Google for "SPFarm null" brings you to the conclusion that this is a 64-bit problem. And indeed, I was trying to use a .NET application compiled in a 32-bit environment (under "Any CPU" target) on a 64-bit server. However, changing the target to 64-bit and recompiling did not fix the problem.
As it turns out, the account I was running it under didn't have permissions to access the farm. I would have expected SharePoint to throw some kind of UnauthorizedAccess exception, however in this scenario SPFarm.Local simply returns null. A quick "Run as..." and it came up fine, regardless of the target CPU.
Lesson learned - if you start seeing "Object reference not set to an instance of an object" exceptions with the SPFarm object, check the account permissions that you're running under.