The error may be caused by the attempted assignment to the modulus operation. I don't know why it would throw a 500 against it though. It looks to me that it won't format the </td>'s quite proper as this would open and close in the same record (instead of closing and opening).
Try this way:
$iCols = 3;
$total = get_post_meta($post->ID,'total_addresses',true);
$iPad = $iCols - ($total % $iCols);
if ($total > 0)
for ($i = 0; $i < $total; ++$i)
if ($i != 0 && $i % 3 == 0)
printf('<td>%s</td>', get_post_meta($post->ID, 'em_address_' . ($i + 1), true));
for ($i = 0; $i < $iPad; ++$i)
Not sure if you want to throw the header into the table itself or just leave it, so I left it out.