I've checked and I believe I have repeated all these steps (unless some of the functions, I have different variables defined in it)...
How can we find out what we're missing though?
If everything works correctly through the SolidCP portal, then you can try to compare DB data that SolidCP generates with your SOAP calls and try to find the differences.
The error that you showed only says that, in the method GetMailboxSetupInstructions code gets a null exception because something with data goes wrong. Maybe SolidCP can't get the object with that ID, that you send into your SOAP calls.
Makes sense... Question though what needs to be defined for the GetMailboxSetupInstructions method to return a valid response? In other words. Why would it return null?
Maybe it's 1 of the tables as you said. Just not sure what's actually checked, Which DB etc... Where can I start digging?
Just compare the DB data. You can use for example the program "heidisql" for viewing DB data.
Create first a hosting space with SolidCP, then create with your SOAP, and after that check the DB. If you are using a fresh database, there is not much data, so it will be easy to check ~ 20 tables, most of them will be empty.