Google up "sql stuff xml path".
My first experiment with it using your question as the challenge:
SELECT Top 1000000
tblAssets.AssetID,
tblAssets.AssetUnique,
tblAssets.Domain,
tsysOS.OSname,
Stuff( ( SELECT
', ' + tblSerialnumber.Product
FROM
tblSerialnumber
WHERE
tblAssets.AssetID = tblSerialnumber.AssetID
AND tblSerialnumber.Product Like '%microsoft%office%'
ORDER BY
tblSerialnumber.Product
FOR Xml Path('')
), 1, 2, '') AS Products,
tsysOS.Image As icon
FROM
tblAssets
INNER JOIN tblAssetCustom On tblAssets.AssetID = tblAssetCustom.AssetID
INNER JOIN tsysOS On tblAssets.OScode = tsysOS.OScode
WHERE
tblAssetCustom.State = 1
ORDER BY
tblAssets.AssetUnique
Product ID and key concatenated just because I wanted to see them there.