404 Issue w/ Custom Post Type – using Meta for Permalink rewrite

Indeed, you need to add the rewrite tags. They indicate what can come in the place of your %cal_year% and similar tags:

add_rewrite_tag( '%cal_year%', '([0-9]{4})' );
add_rewrite_tag( '%cal_month%', '([0-9]{1,2})' );
add_rewrite_tag( '%cal_day%', '([0-9]{1,2})' );

This works, but I don’t understand how: it seems to me something is missing to let WordPress know how it should get from 2010/12/31 to 2010-12-31 or however you saved your custom value. Maybe it just defaults back to the slug?