x.days.ago and x.days.from_now will return UTC times relative to the current time.
Date.today will return the current date for your timezone.
Under CEST this means between 0:00 and 2:00 Date.today == 1.day.from_now.to_date
I declare that this is not a bug of the cost entry, but a bug of the spec, since the CostEntry.spent_on and Rate.valid_from only deal with dates, not with datetimes. (i.e. conversion from datetime to date is the callers responsibility)