How do I use pre_option_{option_name} correctly?

The pre_option_{$option} hook is used to filter the value of the option before it’s retrieved. You need to hook after the value is retrieved so you can manipulate it.

In this case, you can use the option_{$option} hook. So your code will look like this:

add_filter('option_percify_api_key', array( __CLASS__, 'decrypt_api_key') );

For more info – take a look at the source of the get_option function here. Specifically line #225.