strncpy() causes reset

const char* reply = ether.tcpReply(session);    // part of EtherCard.h library

Umm reply is a pointer to char, yes?

sizeof(reply) will always be 2 on an Arduino!

(It's not blowing up where you think it is. What does ether.tcpReply() return?)

Edit: added conclusion.