So, based on rs.'s answer, I came up with an idea. I add a temporary column to table [Assets] that stores the PK of table [Moulds] (or some other subtype table), use it for the update operations, then drop the column. It looks like this:
USE [Maintenance]
ALTER TABLE Assets
ADD Asset_FK int null
GO
DECLARE @AssetID TABLE (ID int)
INSERT INTO Assets (Description, Asset_Type, Asset_FK)
OUTPUT Inserted.Asset_ID INTO @AssetID
SELECT IsNull(Description,''), 5, Mould_PK
FROM Moulds
UPDATE m
SET m.Asset_ID = a.Asset_ID
FROM Moulds m
INNER JOIN Assets a
ON m.Mould_PK = a.Asset_FK AND a.Asset_Type = 5
INNER JOIN @AssetID a2 ON a.Asset_ID = a2.ID
GO
ALTER TABLE Assets
DROP COLUMN Asset_FK
Probably not the most elegant answer, but it seems simple and works.