Thinking again about this: Don't you think one looses quite something if, with --foreground, one cannot differ (via the exit status) between a timeout that allowed the program to clean up and one (when KILLing) that didn't?
Even if the KILL happens via killing timeout itself, couldn't it just return 128+9 in the case --foreground was enabled and the original signal had already been sent? Or is that technically not possible then?