I recently ran into the same problem. Once I figured it out, though, the answer was obvious.
First, the BCP utility has a batch parameter that allows you to specify the number of records to group in a transaction. (We often use 50,000.) BCP will commit this many records at a time. If something happens during the BCP process, only the last batch will be rolled back. If this parameter is not used, by default the entire dataset becomes one batch.
Second, it’s important to remember that the BCP utility is being run in a command shell. It is actually running as a separate process. If you look at Task Manager while the import is running, you will see a process called BCP.exe. This is the actual import process. The SQL Server process is simply waiting for BCP.exe to complete.
So if you cancel/kill only the SQL Server process, that process will wait until BCP.exe completes (at which point the import is finished) before the SQL Server process will die. You must also end the BCP.exe process using Task Manager to get the import to stop.
Note that stopping the BCP.exe process will roll back the last batch. If no batch parameter was specified, this should roll back everything.