An update.... I tried this code and it worked much better. Still not quite sure why the first was not working well.
SELECT tab.col.value('./@id','nvarchar(65)') as 'os_uri',
tab.col.query('./relatedOS[1]').value('(//@id)[1]','varchar(65)') as 'relatedOS_1',
tab.col.query('./relatedOS[2]').value('(//@id)[1]','varchar(65)') as 'relatedOS_2',
tab.col.query('./relatedOS[3]').value('(//@id)[1]','varchar(65)')...