Use the same date-based permalink structure for all post types

You’ll need to add the year, month, and day portions to the post’s permalink in your post_link callback:

$link = str_replace(
  "https://wordpress.stackexchange.com/" . $pto->rewrite[ 'slug' ] . "https://wordpress.stackexchange.com/",
  "https://wordpress.stackexchange.com/" . get_the_time( 'Y/m/d', $post ) . "https://wordpress.stackexchange.com/",
  $link
);

This will return a permalink such as example.com/2014/07/02/post-name.

You’ll have to adjust the logic in your pre_get_posts callback so it handles the fact that the year, month, and day query vars will also be present.