I think I figured out the yield and foreach thing. Here's what I came up with: it would be "yield" and "foreach".
My reasoning is that when you really look at it, Enumerable and Observable both essentially have the same single purpose—to transfer data from a provider (be it an array, a database, a stream, a yield statement, whatever) to a consumer (presumably the app). The only difference is that the former uses a pull model, and the latter uses a push model.
There's a bit of a mental barrier I had to get over to come to that recognition, essentially that we tend to associate Observable with events and things that are time-separated or take place on other threads, but there's no reason it has to be that way. An Observable could easily simply contain an array, and in its Subscribe function, it could simply call subscriber.OnNext(T) for every T in the array and then call subscriber.OnFinish(). In which case, the Observable may as well just call "yield" (provide the data) and have the subscriber do a "foreach" (consume the data). An Observable could even be used in place of Enumerables for database calls if we think about it in that fashion; the only difference would be that it would be pushing from the database rather than pulling from the app, but the data is the same, so the results would be the same. (Again, mental barrier for the previous statement—it's easy to think it would behave differently because we mentally associate Observables with different threads—but I am assuming for this example that we have a single-threaded app in both cases. Nothing else will execute until the data query is finished. In fact, if we use a foreach the app code would be identical!).
Conversely, there's no reason that Enumerables can't be used to handle events or time-delayed multithreaded things. If these things were simply stored in a queue, a pull model (Enumerable) works just as well for these too.
So ultimately, now I find myself wondering, is Rx really giving us anything new at all?