I'm not too sure if I'm right but I think it could be caused by something called api forwarding. I think it works like that; you have app that uses some api, which doesn't exist on the other OS, but there is api with another name and the some function. In the dll where the api used to be is just reference to the new one and thats where the call finaly lands. But the import rebuilder reconstructs import table using the new name, so on older OS it won't run.
I just probably wrote a real $hit but I think it could be like that

Regards,
least