Bill Messmer has given the perfect answer on MSDN. In short:
The delegate object created by Callback is not agile which means that it cannot be passed to the thread pool thread. Instead that thread receives a proxy and calls upon it are marshaled back to the delgate object in the UI thread. Bill has also given an easy fix for the problem.