fixed by adding braces to the if statement,
add_filter('woocommerce_add_cart_item', 'add_donation_item');
function add_donation_item($item) {
if ($item['data']->product_type == 'donation') {
if ( (isset($_POST['donation_amount'])) && (is_numeric($_POST['donation_amount'])) && ($_POST['donation_amount'] > 0) )
$item['donation_amount'] = $_POST['donation_amount']*1;
else
$item['donation_amount'] = 0;
$item['data']->price = $item['donation_amount'];
}
return $item;
}