The DATE data type is internally represented in some binary format. Only when it must be displayed, it gets converted to some string format, like mm-dd-yyyy, dd/mm/yyyy or whatever.
In the opposite way, you must tell MSSQL in what data format you are passing the strings that represent dates, so it can use the correct logic to convert the character strings to the internal DATE representation. When you don't, MSSQL will guess in what format the date is represented, resulting in dates that are sometimes correct, like 01/01/2012, but 01/02/2012 will be converted to February the first.
Code:
INSERT INTO MyTable (aDateColumn)
VALUES(CONVERT(DATE, '31/01/2012', 103)) -- for DD/MM/YYYY format
This is a good place to find out about DATE and DATETIME formats.
You will have to show us the CREATE TABLE script (DDL) of your table and some sample data if you need more help.