You didn't properly turn the contents of $loader_start_time into a literal. The easiest solution is to use placeholders:
my $sth = $dbh->prepare('
UPDATE kcrei_batch_job_history
SET rows_added = ?,
status = 'C',
stop_datetime = getdate(),
stop_tran_seq_nbr = ?,
elapsed_time_hh = datediff(hh, convert(datetime,?), getdate
+()),
elapsed_time_mm = datediff(mi, convert(datetime,?), getdate
+()),
elapsed_time_ss = datediff(ss, convert(datetime,?), getdate
+())
WHERE master_job_no = ?
AND master_job_sub_no = ?
');
$sth->execute(
$_[1],
$hdr_tran_seq_nbr,
$loader_start_time,
$loader_start_time,
$loader_start_time,
$master_job_no
$_[0],
);