They are. And they aren't.
The app remains in memory until the memory is needed. When the memory is needed by another app, some or all if the app's memory is freed.
The OS can subsequently re-load the executable code from the app bundle.
It's my understanding that iOS 4 will actually page the app's working memory (that not used for executable code) to flash. But, unlike OSX, it will not page it when the program is operating. Only when it is suspended, and then only when needed. It can then be paged back in when the app is re-activated.
"Free memory" apps are going to report some scary numbers that will panic people.
iOS keeps apps in memory as long as it can in order to minimize overhead when the app is restored. No sense in having the memory sitting there empty.
Simply re-building an app with a Base SDK of 4.0 will Fast App Switching for the app. This is going to cause some unintended consequences that are going to show up as bugs in some apps. For example, for some apps, it may NOT be appropriate for them to "continue where they left off" when they are restored. These apps may behave in unexpected ways until the author alters the behavior of the app under 4.0. Apps that use timers may have results they were not expecting. I'm sure there are numerous other "gotchas". The most common I've seen is inadvertently leaving iPad "orphaned", where the App Store actually updates an app on iPad to a newer, 4.0-only version - but then that version won't actually run on the device. This is an error on the part of the developer that is not being caught at present by the App Store testing process.
(This is less severe for older iPhones, because in that case the App Store won't update the app. But, in either case, the author had *probably* meant to support the older devices as well. At least the app won't be updated to one that won't run! Instead, the app just won't be updated.)