If the order of your columns is different in the LINQ to SQL class from that in the database, then you also need to add a column mapping to the bulk copier. Otherwise you get mysterious errors in some of the loaded columns!
In my simple fix, I assume that the names match even if the order may have been messed about with. In this case you can add the following:
table.Columns.Add(new DataColumn(property.Name, propertyType));
new SqlBulkCopyColumnMapping(property.Name, property.Name));
For extra credit, the mapping could be pulled out of the LINQ attributes.