xorwf literal not affecting z flag even when literal value is same as value in w
Your movf PORTC instruction lacks a destination. 

The default is f, PORTC in this case, so you are not putting the number in the w register. 

Change it to movf PORTC, w  

And you should always state it explicitly to prevent problems. Running a simulation would probably have caught this, and it's worth learning how to do it. 

Edit: 
Also, you are using xorwf (ex-or the w register with a file register), when you should be using xorlw (ex-or a literal with the w register). 

xorwf takes the operand to be an address and xor's the w register with the contents of the register at that location (0x44, in the 96 bytes of general purpose registers), which is not what you want.