Because the exception can (and I believe is) thrown before calling `schedule_refill_tokens` we never actually schedule the first refill:

```erlang
1> riak_core_bg_manager:set_token_rate(new, {1000, 1}).
undefined
2> riak_core_bg_manager:get_token(new).
ok
3> timer:sleep(2000), riak_core_bg_manager:get_token(new).
max_concurrency
4> timer:sleep(2000), riak_core_bg_manager:get_token(new).
max_concurrency
```

This is not caught by the eqc test because eqc needs to do the token refilling in order to properly model things. I wonder if we could use `eqc_component` callouts to more tightly couple the test to the scheduling of the refill but that isn't something I see us extending the test to do quickly. This is something that is easier caught by hand for now unfortunately. 

From a stylistic perspective, part of the issue here is the use of `try/catch` for control flow, imo. It is unclear where the exceptions may be thrown and what steps we do not perform in various cases, but alas, its probably too late for those sorts of changes.