http://www.cisco.com/en/US/docs/ios/12_2s/feature/guide/fs_bgpnh.html#wp1043334
Do not use the neighbor next-hop-self command to modify the next hop attribute for a route reflector when this feature is enabled for a route reflector client. Using the neighbor next-hop-self command on the route reflector will modify next hop attributes only for routes that are learned from eBGP peers and not the intended routes that are being reflected from the route reflector clients. To modify the next hop attribute when reflecting a route, use an outbound route map.
Yup, this can cause all kinds of odd routing issues. We actually saw this in production.
Our solution was to add a community incoming from all EBGP connections then when we advertise out via IBGP we match on the community, change next-hop to self, remove that community, then accept.