UPDATE SET values ignoring set ordering
Test

UPDATE coupons c, accounts a
SET c.start = a.vipExpires,
    c.end = DATE_ADD(a.vipExpires, INTERVAL c.days DAY),
    a.vipExpires = c.end
WHERE a.id = 1 AND c.id = 1;