Since OS X Mavericks, the defaults system is caching the preferences system-wide (i.e. not in the application's process!) to improve performance of the user defaults API. If you use the defaults command, you are fine, since it appears to use the normal user defaults API.
On the other hand, if you edit a preference .plist file with a text or plist editor (even the one included with the most recent Xcode 5 preview), the cache will not be flushed and even after restarting the program in question, it will retain the old preferences.
The API documentation states that the cache is synchronized with the on-disk plist file contents periodically, but does not indicate how often, let alone how to flush the cache manually.
Logging out and back in appears to flush the user defauts cache, but other than that, the defaults command is currently the only way to reliably change preferences without waiting for the timeout.