Hi Angela,
I know I'm late to the party but figured I'd throw in in two cents anyway. I've used an onAfterAdd/Update method to control float before. In one case, if the updated part (or CAD) was of a specific type/state, the desired behavior was to float it into Released BOMs/CAD Structure, which of course have Fixed behavior. I used SQL for this and it did work nicely with no noticeable performance impact. Obviously not very configurable though, and I didn't need to keep track of what was floated and when, so this might not be very useful in your case. I suppose you could run a select first to identify the relationships that will be updated and then store those somewhere for visibility. I've also implemented a CreateHistoryRecord method I can call from anywhere, which takes a part id, action name (e.g. "Update") and comment, and creates a history record against the item with those values. It's an easy way to store something on the item that indicates a change occurred and what it was.
Razorleaf also has a feature they developed called Manufacturing Suite, which has a Change Management module that includes float configuration options for which items to float into which relationships when an ECO completes. This actually keeps track of what was floated and into what items, but it's limited to floating affected items being released on an ECO.
As for notifying users, I don't quite follow Christopher Gillis's suggestion. It seems like it would have to be triggered by a client-side method to run the check first, because as far as I know you can't prompt the user during server events. So you'd have to hijack/interrupt the client-side Save action. Might not be fully understanding your intent though.
Anyway, hope my ramblings are helpful to someone!