How can I fix the Oracle syntax of this update by the result of a select in Oracle 10g?
The documentation for the Update statement allows this syntax even in 10g, so perhaps this is a bug.  I looked for one on My Oracle Support, but couldn't find one.  Perhaps you should open a SR with Oracle to see what they say.

As a workaround if you re-arrange the statement to have the literal first it will work on both versions.

update test set col1 = 1 + (select 1 from DUAL );


Another workaround is to wrap the function in to_number.  I don't see why either should be necessary.  Updating a column to the results of a compound expression that contains a scalar subquery expression added to a value is supported by the syntax and should work.  

Similar behavior found here also with no resolution.