Joel, I don't think you need to pass in the DI services into the thread.  The thread has context to the dependencies. Can you try it like that? If not, cfthread actually creates copies of the service singletons.

On another note, just use the asynchronous interceptors that ColdBox provides.  So basically, remove the cfthread and use this instead:

public void function cbadmin_onLogin( required event, interceptData, buffer ) async="true"{}