NOTE 1: This article deals with a specific type of freeze I was experiencing, where Oblivion would freeze on fast travel/walk to a location, but in earlier save games I could successfully visit the same location without any freeze. If you are experiencing some other type of freeze issue, this article won't be able to help you.
NOTE 2: This article goes into a lot of technical detail, and I don't yet know if the same steps will work for others with a different collection of mods. I am posting this information in case it does indeed help others. The steps assume the reader has a working knowledge of enabling/disabling mods, knowing your load order, using the in-game console, using a text editor and regular expressions, and has the patience to carefully follow the steps!
Introduction
In my current save game there were at least 4 places where I could not no longer fast travel to. On a fast travel attempt, the game would freeze during the loading screen which shows the progress bar. Nor could I approach those same places on foot. If I fast travelled to a location several cells away and then tried to walk towards the location where I could not fast travel to, the game would freeze on the way there.
However, these were places I had previously successfully travelled through; indeed I could load earlier save games and go to those same places without any issue. So the issue did not seem to be due to missing/corrupted resources like meshes. My thought was that there were invalid references in my save game causing oblivion to seize up when trying to load these references.
The upshot is I found a successful workaround that allows me to now travel to those places without any freeze. To do so I had to disable one or more references. Interestingly, these references have in my case always been buildings. When disabled, the referenced building disappears in game, however any doors into the building remain behind so you or NPCs can still enter the building. Thus apart from the visual discrepancy, gameplay is not affected.
Steps
The tricky part was finding the references that need to be disabled. I have 200+ mods so initially I had to disable mods from my load order to identify which mod the invalid references belonged to. Once done, for a simple mod with only a few buildings, I was able to identify the building reference to disable with the mod called RefScope. For a complex mod, I had to parse a text dump of the save game file to identify candidates that might be the cause, and then used trial and error while disabling these references to find the culprits.
Step 0: Preparation.
You will need the mod called RefScope in your load order (http://www.nexusmods.com/oblivion/mods/21862). You will also need a text dump of your save game file. To get this, load your latest save game, then enter the console and use the command 'save mygame 1'. This will save the game to a text file called mygame.ess.txt. It might take a few minutes so be patient. This text file contains a long list of records (~350K lines in my case)
Step 1: Identify the mods that cause the freezes.
If you only have a few mods this might be trivial; there may only be one mod that affects the area where the freeze occurs. In my case I have a ton of landscape related mods, so I had to repeatedly disable one or more mods working backwards from the last mod in my load order (the bashed patch in my case), then load the save game that had a problematic site, and fast travel to the site. Once the fast travel succeeds without freezing, then the last mod that was disabled is the source of the references that will need to be disabled to fix that site. I had a good idea of which mods affected which areas of the game, so in most cases I could disable a batch of 10-20 mods in one go (as long as I worked backwards from the end of the load order), and then just disable any suspected mod individually. As well as the mod itself, also identify its load order number. The first two digits of all references belonging to that mod will be the mod's load order number.
By the way, I found the quickest way to effectively recover from an oblivion freeze was:
(i) modify oblivion.ini to set it to windowed mode with a window size that allows me room to also have other windows open like task manager and my text editor (refer to http://www.uesp.net/wiki/Oblivion:Ini_Settingsfor instructions on modifying this ini)
(ii) start task manager, switch to processes tab, and click on the memory column heading so that processes using the most memory will be listed first (ie oblivion process)
(iii) start oblivion, select play in the initial dialog
(iv) once oblivion window opens, click within it to give it focus, press space to skip through loading screens, load the latest save game and try to fast travel to the problematic site
(v) if oblivion freezes, press alt-tab keyboard combo as many times as necessary to switch to task manager window
(vi) press down arrow once, this selects the top process which is oblivion
(vii) press the right context menu button on the keyboard (on my keyboard this is the key to the left of the right ctrl key), and use down arrow twice to select end process. A final confirm and this kills oblivion
Step 2: Get the reference ID for the buildings in the mod.
For a mod with a few buildings, load an old save game where you are able to fast travel to the site without a freeze. Stand in front of each building and press X to highlight it, then with X still pressed, press space to bring up a RefScope dialog where the first section details the reference id of the building. Verify that the building is actually from the mod causing the freeze. Cross check that the first two digits of the reference id will also be the mod's load order number.
For bigger mods (or if you don't have a save game where you can successfully fast travel to the site), all the building reference ids can be obtained from the text dump of the save. However, the buildings are not labelled in this file. From my experimentation, I developed a regular expression that in my case seems to match the reference ids of all the buildings. Load the text dump in a text editor that supports regular expression searching eg Notepad++, and use the following expression:
"^ DE.*125 .*Animation\(16\) Movement" (the regular expression is everything between the double quotes, including the spaces. Replace the DE with the load order number of the mod causing the freeze)
In the lines that match the regular expression, the reference id is the 8 digit number in the first column.
For the next 2 steps, do these one problematic mod at a time, and do the smallest problematic mod first, as you will see a positive result much quicker.
Step 3: Load up your latest save game, and start disabling building references that you have identified for that mod.
To disable a reference, enter the console and use the command 'prid ' to select the reference, then use the command 'disable' to disable it. After disabling the buildings, exit the console and fast travel to the site and confirm there is no more freeze. Save a new game
Step 4: Re-enable any references that do not contribute to the freeze.
Typically only 1 reference is the cause of the freeze, so I want to re-enable the others so that I don't have lots of missing buildings. Start re-enabling references you disabled (use the console commands 'prid ' to select the reference, then 'enable'). You will know which references are no good because after you re-enable it and exit the console back to the game world, the game will freeze again within seconds. Make a new save game after you have 'fixed' the freeze, then move onto the next problematic mod and start at step 3 again.
Note with step 4, I found that in 3 of my 4 cases, only one reference needed to be disabled. But in the 4th case (which was Better Cities Blood & Mud), I found there was 4 references (out of 50) that had to remain disabled.
Wrap up
The steps above helped me workaround the freeze issue in 4 different instances, hopefully it will also help others. Let me know if it does, or if you had to tweak any of the steps, or if you have any other insights or quicker methods. I still do not know what actually causes the affected reference ids to go bad in the first place. I have long ago disabled fast saves, and I mostly save to a new game slot each time I save, but not always. Perhaps when a save game is reused a bad reference could occur? Also I find it curious that for me, it is always a building that is problematic. Buildings are static; if anything I would have expected an NPC or similar to be the source of any freeze issue since they are dynamic and their actions are under the control of scripts that may have bugs. I believe that the only mod I have that affects buildings globally is AWLS which adds window lighting and chimney smoke effects; perhaps there is some subtle bug that could affect saved games sometimes when using this mod, but apart from checking whether disabling that mod stops the freeze issue (it didn't) I haven't investigated further.
For those interested in reading further, I am documenting below how I came to discover that it was bad building references causing my freeze issues, in case this may help with further investigation by others.