I tried that, all of that. I will attempt to put the solution in words.
1. Calculate the dateDiff in months between the Start and End Dates
S: E: Diff:
2008-06-15 2008-08-10 2
2. Join to a Table (tally, derived, CTE ) of numbers that covers your range including 0
Start End Diff Num
2008-06-15 2008-08-10 2 0
2008-06-15 2008-08-10 2 1
2008-06-15 2008-08-10 2 2
3. Calculate the Start of months (and therefore the End )
Start End Diff Num NewStart NewEnd
2008-06-15 2008-08-10 2 0 2008-06-01 2008-06-30
2008-06-15 2008-08-10 2 1 2008-07-01 2008-07-31
2008-06-15 2008-08-10 2 2 2008-08-01 2008-08-31
NewStart = DateAdd(Month, DateDiff( month, 0, Start) +Num ,0 )
Then do the Case When NewStart > Start Etc.