If you think about it, you are getting the correct answer.
start is 2014-06-29 14:00:00
1 day's difference would be 2014-06-30 14:00:00
2 day's difference would be 2014-07-01 14:00:00
3 day's difference would be 2014-07-02 14:00:00
4 day's difference would be 2014-07-03 14:00:00
your end date is 2014-07-02 05:45:00 which would be 2days 15hours and 45minutes so showing just the days difference the answer would be 2.
At no point would the answer be 4 days.
EDIT/UPDATE:
Well this gives the answer 4!
<?php
$start = strtotime('2014-06-29');
$end = strtotime('2014-07-02');
$diff = $end - $start;
echo 'DAYS DIFF = ' . date('d', $diff) . PHP_EOL;
But this does not it gives 3 as of course thats the correct answer.
<?php
$start = strtotime('2014-06-29 14:00:00');
$end = strtotime('2014-07-02 05:45:00');
$diff = $end - $start;
echo 'DAYS DIFF = ' . date('d', $diff) . PHP_EOL;
So if you want the answer 4 it look like you are going to have to remove the time portion of your data/time field.