I usually fix this with 0x0a as proposed by J.Perkins above. Actually, I don't fix it: all of my scripts use 0x0a. I hit this problem so rarely that I always have to search for the fixes because it is too long between breakages.
The problem this time is that the file had no CRLF on the last line. Added CRLF and ... runs like a champ.
*As for Contango's comment that he has "never managed to get a real world .csv file to import using this method". He is correct. If your "real world" is 3rd party datasets, then BULK INSERT is a really, really bad idea. My real world is very different. My team creates the file using bcp. Yep. Always pristine data. Well ... almost always. Developer modified the file after it was created.