It seems to me that you simply need to add 1 to the result of your calculation in all cases, except when the end date is exactly at the same hour after the same interval (unless you calculate that as an occurrence).
╔══════════════════╤══════════════════╤══════════════╤══════════════╤════════════╗
║ Start Date │ End Date │ result of │ result of │ Expected ║
║ │ │ weeksBetween │ dividedBy(2) │ result ║
╠══════════════════╪══════════════════╪══════════════╪══════════════╪════════════╣
║ 2016-06-07 09:00 │ 2016-08-30 10:00 │ 12 │ 6 │ 7 ║
╟──────────────────┼──────────────────┼──────────────┼──────────────┼────────────╢
║ 2016-06-07 09:00 │ 2016-08-30 08:00 │ 11 │ 5 │ 6 ║
╟──────────────────┼──────────────────┼──────────────┼──────────────┼────────────╢
║ 2016-06-07 09:00 │ 2016-08-30 09:00 │ 12 │ 6 │ 6 or 7 ║
║ │ │ │ │ you decide ║
╟──────────────────┼──────────────────┼──────────────┼──────────────┼────────────╢
║ 2016-06-07 09:00 │ 2016-08-23 10:00 │ 11 │ 5 │ 6 ║
╟──────────────────┼──────────────────┼──────────────┼──────────────┼────────────╢
║ 2016-06-07 09:00 │ 2016-08-23 08:00 │ 10 │ 5 │ 6 ║
╟──────────────────┼──────────────────┼──────────────┼──────────────┼────────────╢
║ 2016-06-07 09:00 │ 2016-08-23 09:00 │ 11 │ 5 │ 6 ║
╚══════════════════╧══════════════════╧══════════════╧══════════════╧════════════╝
Take the first combination - the end date is slightly after the supposed last occurrence:
Start
──╂──────┼──────┼──────┼──────┼──────┼──────┼─┰╴
end
1 2 3 4 5 6
What Joda counts is the gaps. What you want to count is the ticks. And there is always one more tick than there are gaps.
In the second case, the end is a little before the next occurrence:
Start
──╂──────┼──────┼──────┼──────┼──────┼─────┰┼─╴
end
1 2 3 4 5
This time Joda says there are 5 whole "periods" between the start and the end, but what you want to count is the ends of those periods, , so it's always one more.
The only case where you might want to decide against adding one is if the end falls exactly on the next occurrence, in which case you may want to exclude it as you consider it to be "already ended".
If so, you simply add a test for it:
Weeks weeks = Weeks.weeksBetween(startDateTime, endDateTime);
int occurrences = weeks.dividedBy(2).getWeeks();
if ( ! startDateTime.plus(weeks).equals(endDateTime) ) {
occurrences++;
}