There are a few possible reasons for this, but the most likely is that you have the text in row option set on for the table. This forces SQL Server to save the data inline, meaning that the length of the data for all columns in the row, including the ntext field, has to be under roughly 8K. Use this code to set it off:
sp_tableoption N'MyTable', 'text in row', 'OFF'
Check out BOL for the ntext data type, and pay attention to the text in row information for the subtleties of this feature..
It is also possible that somewhere along the line the data is being passed using a variable that has a smaller capacity than you think. If the text in row possiblity doesn't bear any fruit, post the code you're using to store the data, from the app through T-SQL.
Don