I had the same UserProfileApplicationAvailableException error in my ULS logs.
I tried a lot of stuff including rebuilding my UserProfileApplication.
Followed some of the steps in the UPS guide here: http://www.harbar.net/articles/sp2010ups.aspx.
I was able to successfully rebuild the UserProfileApplication, but it was still not working.
I noted another error I discovered when analyzing the UserProfileApplication via powershell.
To list out the proxies:
Get-SPServiceApplicationProxy
To Get the ups proxy:
$ups=Get-SPServiceApplicationProxy -Identity [GUID of UPS Proxy]
To display the information on the proxy:
$ups | Format-List
In the $ups.ServiceEndPointUri information, I found a reference to the url to the topology service in the query string.
authority=https://[SERVER]:32844/Topology/topology.svc
So, I tried accessing it.
I discovered that the service was unavailable because of lack of memory. Memory gates checking failed because the free memory (1398493184 bytes) is less than 5% of total memory. https://stackoverflow.com/questions/16119546/wcf-service-with-full-memory-error-memory-gates-checking-failed-because-the-fre
So, basically, web services on the servers were not working due to lack of memory. I had a measely 8 Gigs of RAM per web front end. But, since I can't just summon memory on the fly, one possibility is to set the following in web.config:
<configuration>
<system.serviceModel>
<serviceHostingEnvironment ... minFreeMemoryPercentageToActivateService="0" />
</system.serviceModel>
</configuration>
However, instead I decided to configure IIS to automatically recycle the web app pools once they exceed 900,000 KB by configuring the Private Memory Limit Recycling setting of the application pools of the SharePoint web applications. Note: you can probably set this higher on your priority web applications if you have the memory to spare.
After making these adjustments, SharePoint web services started working again, the "Unable to load profile" error went away, and My Sites returned to working condition.
****** EDIT ******* Later, I discovered that 900,000 KB was not enough, because the app pools recycled too often. I later changed the recycle Private Memory Limit settings to a higher setting (around 2,000,000 KB) and was able to double the RAM on my front end servers.