Here is some code that should work with your MCP9801. It is a stripped-down version of some code that does work.

Code:
ASM
    ifndef __18F2321
        error "18F2321 not selected"
    endif
ENDASM 

ASM
       movlw 0x52                              ; %0101 0010  = 2Mhz, internal osc block
       movwf OSCCON
       movlw 0x80                              ; %1000 0000  = PLL disabled
       movwf OSCTUNE
ENDASM       
    
     
        DEFINE OSC 4       ; We are running at 2, but there is no DEFINE for that                                                  
        Define USE_LFSR 1
        DEFINE I2C_HOLD 1
        DEFINE I2C_SLOW 1
 

     
     DataPin             var     portc.1
     ClockPin            var     portc.0
     LED                 VAR     PORTB.5
     
     TRISA = $FF
     TRISB = $FF
     TRISC = $FF
     
        
    MCP9800_ADDR        VAR     BYTE
    MCP9800_CONFIG      VAR     BYTE
    ConfigByte          VAR     BYTe
    TemperatureRaw      VAR     WORD
    TempOutLSB          VAR     BYTE
    TXBuffer            VAR     BYTE[5]
    TempVar             VAR     BYTE

           
    FinalTemp           VAR     BYTE
    LEDCNTR             VAR     WORD
    SensorErrorFlag     VAR     BYTE

    TEMPERATURES         var word
    SerialNumber         VAR WORD  
    FinalTempW           VAR WORD 
    TRISB.5 = 0         ; LED pin
    
    RES CON 0 ; low resolution 

     WDTCON = 1  ; Turn on the WDT
     
     Gosub InitSensor
     Gosub ReadSensor ; prime the pump
     Pause 200   ; Really 400 msec
Main:    
    
     Gosub ReadSensor ; Do it again
     Pause 500  ;Really 1 sec
     ; TEMPERATURE will be in TXBuffer[0] 
     Goto Main 

InitSensor:  

     MCP9800_ADDR = %10010000
  
   
     MCP9800_TEMPERATURE  CON 0 ; Temperature register
     MCP9800_CONFIGURATION CON 1 ; Configuration register
     MCP9800_HYSTERESIS  CON 2
     MCP9800_LIMITSET    CON 3
    
     ONESHOT_OFF         CON %00000000 ;bits for register configuration
     ONESHOT_ON          CON %10000000
     RESOLUTION_9bits    CON %00000000 
     RESOLUTION_10bits   CON %00100000 
     RESOLUTION_11bits   CON %01000000 
     RESOLUTION_12bits   CON %01100000 
     INT_MODE            CON %00000010 
     SHUTDOWN_OFF        CON %00000000 
     SHUTDOWN_ON         CON %00000001 
     

Start:    
  IF !RES THEN  
    MCP9800_CONFIG = oneshot_off | Resolution_9bits |shutdown_off
  ELSE      
    MCP9800_CONFIG = oneshot_off | Resolution_12bits |shutdown_off
  ENDIF
    
;    Tempout = (TEMPERATURE.LowByte >>5 ) * 125 ; resolution 11 bits 
;    TempOut = (TEMPERATURE.LowByte >>6 ) * 25 ; resolution 10 bits


INIT_MCP9800:
 
    IF !CLOCKPIN or !DATAPIN then goto SensorError
    i2cwrite DATAPIN,CLOCKPIN,MCP9800_ADDR,[mcp9800_configuration,mcp9800_config],SensorError
    i2cwrite DATAPIN,CLOCKPIN,MCP9800_ADDR,[mcp9800_temperature],SensorError
    PIE1.3 = 1 
  
    Pause 10 ; 20
    RETURN
    

;--------------------------------------------------------------------------------
    
ReadSensor:

   SensorErrorFlag.1 = 1   ; set to error condition before we start
    
   IF !CLOCKPIN or !DATAPIN then goto SensorError
    i2cread DATAPIN,CLOCKPIN,MCP9800_ADDR,[TemperatureS.HighByte,TEMPERATURES.LowByte],SensorError
    IF RES = 0 THEN
         IF TempOutLSB.7 THEN TemperatureS.Highbyte = (TemperatureS.HighByte + 1) ; round up
         FinalTemp = TemperatureS.HighByte     ; 
         IF FinalTemp = 0 THEN FinalTemp.7 = 1         ; Zero degrees is negative
         TxBuffer[0]= FinalTemp
         TxBuffer[1] = 0 - FinalTemp
         SensorErrorFlag.1 = 0
     ELSE    
         FinalTempW.HighByte = TemperatureS.HighByte     ; 
         FinalTempW.LowByte = Temperatures.LowByte
         IF FinalTempW = 0 THEN FinalTempW.15 = 1         ; Zero degrees is negative
         TxBuffer[0]= FinalTempW.HighByte
         TempVar = FinalTempW.Lowbyte >> 4
         TXBuffer[1]= TempVar *66/10 
         TxBuffer[2] = 0 - (TxBuffer[0] - TXBuffer[1])
         SensorErrorFlag.1 = 0
     ENDIF
     Goto ENDRoutine  
  
SensorError:
    LED = 0
    PAUSE 100   ; 200
    LED = 1
    PAUSE 100
    LED = 0
    PAUSE 100
    LED = 1
    SensorErrorFlag.0 = 1  ; Restart if error, but flash LED
    TXBuffer[0] = $F0 + SensorErrorFlag
ENDRoutine:

    Return
;-------------------------------------------------------------------------------------------------------  
 
       
ASM
     ORG 0x8FE    ; More than Half full
     nop
ENDASM