sprintf() to assemble String and float pieces locks up
This variable:

String utcDateString = "";


Is a C++ String, not a character array like sprintf() is expecting.  To convert this string to a character array such that sprintf is expecting, you must use .c_str() in your sprintf, i.e.:

sprintf(foo,"This is a format for %s", utcDateString.c_str());


Doing this should prevent the sprintf line from causing a memory fault.