In the file SyncEngine/formats30/contact-to-airsync.xsl at line 173, the conversion script chooses the "home phone number" path if either the Location is specified to be "Home" or if there is no Location specified.
If the type is Voice, all is well - this is a home phone number. However, there are numerous other types of phone number for which the Location attribute goes unspecified.
This means that all of those other phone number types (Cellular, etc) go unprocessed. There is a case intended to handle them (starting at line 199) but this code never executes because of the check for null Location at line 173.
To fix this problem, simply remove the "or not(@Location)" clause from line 173. I have verified that the conversion works correctly once this change is made.