By default you can have overlapping results, it is the reason why all second contiguous entry is skipped (since you match his first letter). A way to avoid this problem is to not match this first letter by using a lookahead assertion (?=..)
that means "followed by" (A lookahead is only a check and matches nothing):
re.findall(r"(\b[A-Z].+?)(?=\s[A-Z]|\s*$)")