My orignial response to this is here.
Are you using the correct BundleContext? BundleContext.getServiceReference() does a check on assignability. It would only return a reference if you ultimately can use the service associated with it. The service consumer must have a wire to the service type, otherwise you would get a CCE on BundleContext.getService()
There are special and IMHO somewhat undefined rules if the system bundle context or service factories are involved.
If you enable DEBUG on org.jboss.osgi you should see the details of service assignability