Very close. I would make some slight adjustments as follows:
UPDATE dbo.weights
SET
shipweight2 = CASE WHEN shipweight2 IS NULL THEN @weight ELSE shipweight2 END,
--CASE is just to doublecheck -- should always apply because of the WHERE conditions
shipweight3 = CASE WHEN shipweight2 IS NOT NULL AND shipweight3 IS NULL THEN @weight ELSE shipweight3 END
WHERE
id = @id AND
(shipweight2 IS NULL OR shipweight3 IS NULL)
SQL DBA,SQL Server MVP(07, 08, 09) A socialist is someone who will give you the shirt off *someone else's* back.