How to get 10bit data of ADC using SPI protocol
There are a few things that look suspicious to me. On the master side, I would introduce a small delay between setting the slave select signal and sending the dummy data (to start the transfer), though this may not be a problem. The other things that's suspicious is that in your slave code you first have ...

ch1 = ADRESL;   
ch2 = ADRESH;


but then 

SSPBUF = ch1;    //Loading ADRESH value to SSPBUF
...
SSPBUF = ch2;    //Loading ADRESL value to SSPBUF


So, according to your comments and to the code the master expects, you expect to get the high byte first, then the low byte, but the slave actually sends ADRESL first, then ADRESH.

Lastly, after the first byte transfer you introduce a long(er) delay (mdelay&lt;100) before deselecting SS on the master. On the slave side, there is only a short delay, then you wait for the SS to be set again, which most likely is still set based on the long delay by the master. You then set the second data byte and wait for the BF bit to be set. I'm not familiar with the PIC18F4550, so I don't know if this is an issue, but since you never explicitly clear the BF bit, it might still be set from the first round, which would then cause your slave to restart the main loop (after another short delay).