No, SQL Server does *NOT* round "to the millisecond".
http://msdn.microsoft.com/en-us/libr...7(SQL.80).aspx
It rounds to the nearest integer multiple of 3.33 milliseconds.
As that page says, "Values are rounded to increments of .000, .003, or .007 seconds..." So you will never see a value such as xxx.814 -- it would have to be either xxx.813 or xxx.817
Having said all that...
I sure don't see why x.198 would get rounded to x.110
Sounds like a bug in SQL Server and/or the driver.
But in any case, it doesn't sound to me like this is ever going to be accurate enough for your purposes. So I hate to say it, but I think you are going to have to create your own pseudo-datatype to hold you dates and times as accurately as you need them.
I would suggest that you might want to just keep them as strings (VARCHAR/NVARCHAR) if they indeed have the format you show:
2009-01-26 12:00:27.198485020-0800
presumably if you just lopped off the "-0800" you would have values that would always sort correctly, to whatever the recorded accuracy you have. [Even the "-0800" wouldn't interfere unless the number of digits after the decimal point is variable.]
Hmmmm???