Is there a more efficient way to apply a new schema to an existing collection when there's existing data?
You can do some limited adjustments to the schema with ALTER XML SCHEMA COLLECTION.  Here's a simple example:

USE tempdb
GO

IF OBJECT_ID('dbo.users') IS NOT NULL DROP TABLE dbo.users
GO
IF EXISTS ( SELECT * FROM sys.xml_schema_collections WHERE name = N'xsd_test')
DROP XML SCHEMA COLLECTION xsd_test
GO

-- Create a simple schema
CREATE XML SCHEMA COLLECTION xsd_test AS '&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"&gt;
    &lt;xs:element name="users"&gt;
        &lt;xs:complexType&gt;
            &lt;xs:sequence&gt;
                &lt;xs:element maxOccurs="unbounded" name="user"&gt;
                    &lt;xs:complexType&gt;
                        &lt;xs:attribute name="name" type="xs:string" use="required" /&gt;
                    &lt;/xs:complexType&gt;
                &lt;/xs:element&gt;
            &lt;/xs:sequence&gt;
        &lt;/xs:complexType&gt;
    &lt;/xs:element&gt;
&lt;/xs:schema&gt;'
GO

-- Create a table with XML bound to that schema
CREATE TABLE dbo.users ( userId INT IDENTITY PRIMARY KEY, userXML XML(xsd_test) )
GO

-- Populate the table
INSERT INTO dbo.users ( userXML )
VALUES
    ('&lt;users&gt;&lt;user name="Sinaesthetic"/&gt;&lt;/users&gt;' ),
    ('&lt;users&gt;&lt;user name="wBob"/&gt;&lt;/users&gt;' )
GO

-- Alter the schema
IF EXISTS ( SELECT * FROM sys.xml_schema_collections WHERE name = N'xsd_test')
ALTER XML SCHEMA COLLECTION xsd_test
ADD '&lt;xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"&gt;
    &lt;xs:element name="skills"&gt;
        &lt;xs:complexType&gt;
            &lt;xs:sequence&gt;
                &lt;xs:element maxOccurs="unbounded" name="skill"&gt;
                    &lt;xs:complexType&gt;
                        &lt;xs:attribute name="name" type="xs:string" use="required" /&gt;
                    &lt;/xs:complexType&gt;
                &lt;/xs:element&gt;
            &lt;/xs:sequence&gt;
        &lt;/xs:complexType&gt;
    &lt;/xs:element&gt;
&lt;/xs:schema&gt;'
GO

UPDATE dbo.users
SET userXML.modify('insert &lt;skills&gt;&lt;skill name="someSkill"&gt;&lt;/skill&gt;&lt;/skills&gt; after (users)[1]')
WHERE userId = 1