I have not tried the SQLXMLOLEDB.4.0 destination, so not able to comment on that.
The second option you proposed can be done using the undocumented sp_MSForeachTable stored procedure like this:
sp_MSForeachTable 'select * from ? for xml raw'
If you want to insert the data into a single table, you can modify it like this:
CREATE TABLE dbo.TableXMLs(tablename VARCHAR(255), XMLDATA XML);
sp_MSForeachTable 'INSERT INTO dbo.TableXMLs SELECT ''?'', (select * from ? for xml raw) '