Debugger and Programmer mode on ICD3
I think we need more information to be able to help you find why you are not reading data from Matlab.  But first, the answer to your question 


  what changes between debugger mode and programmer?


There are a few things that are different, none of which I would think is affecting you being able to read data in Matlab. The main difference is that when you change to programmer mode, you are not able to stop the program in mid-execution, that is you download the HEX to your dsPIC and then there is no more interaction. In debugger mode you can set breakpoints and step through the execution of the HEX, look at the contents of registers, etc. Apart from that, the program should behave exactly the same.

Here are a couple of things I would check
1.- When you mean "remove de ICD3" I interpret that you unplug it. If that is the case, then make sure you have a common ground. It might be that you do not share a ground with you PC, which was there when you had the ICD but not anymore.

2.- Make sure that there is no overrun in such a way that when you step through the dsPIC is able to keep up but when it is in "free run" it just gets overloaded.

Hope this helps