I can confirm that this is caused by (at least) the Software Update feature ("Settings -> About phone -> Software update -> Check for update). Everytime I run it and Wi-Fi is connected, "Data roaming" becomes activated.
I suspected Software Update because you mentioned rebooting, because I noticed some time ago that every reboot the phone uses it to check for updates. I cannot reliably reproduce this though, only when Wi-Fi is also connected.
I can 100% reproduce (and confirm via logs) that when "Check for updates" is run and a Wi-Fi connection exists, it will activate data roaming:
1. Make sure you're connected to Wi-Fi
2. Make sure "Data roaming" is disabled
3. Execute "Check for update"
4. Go to "Data roaming" again and
see it's enabledI also executed the above with Catlog running in background, and thereby
verified that data roaming is being enabled.
The following is me manually enabling/disabling data roaming via the Settings menu:
07-07 14:11:27.740 D/NetworkSettings( 2841): onPreferenceTreeClick: preference == mButtonDataRoam.
07-07 14:11:27.815 V/SettingsProvider( 2691): secure <- value=0 name=data_roaming
07-07 14:11:27.815 V/SettingsProvider( 2691): notifying: content://settings/secure/data_roaming
*snip*
07-07 14:11:30.505 D/NetworkSettings( 2841): onPreferenceTreeClick: preference == mButtonDataRoam.
07-07 14:11:31.770 V/SettingsProvider( 2691): secure <- value=1 name=data_roaming
07-07 14:11:31.770 V/SettingsProvider( 2691): notifying: content://settings/secure/data_roaming
Notice how it reacts to a click, and sets the value of the data_roaming setting to either 0 or 1.
Now, with Catlog running in background, when I start Software Update, I noticed
to my horror the following:
07-07 14:11:42.660 I/DBG_WSS_DM( 6163): [DMService.java Line:1354] setDataOnRoamingEnabled Data Roaming Off <-> On
07-07 14:11:42.735 V/SettingsProvider( 2691): secure <- value=1 name=data_roaming
07-07 14:11:42.735 V/SettingsProvider( 2691): notifying: content://settings/secure/data_roaming
Notice how some debugging service
actually enables roaming.
I have attached the output of Catlog, filtered for strings containing "roam" (case-insensitive). You can see that I manually disabled, enabled and disabled roaming (this was a marker for the log, to see if it produced useful information), and later on an automatic setting by Software Update. The log contains Exceptions, but AFAICT that's normal for Android...
Can anyone please try to reproduce this? I'd especially welcome tests by both roaming users (currently traveling) and non-roaming users, to see if active roaming is a condition for this error.
Thanks for your reply chrisk. I know now that I'm not the only one

Where did you buy your phone ? And in which country are you using it ? Which operators ?
Austria, with Orange as regular operator and AT&T as roaming operator here in Florida (where I'm on vacation).