One problem is how do you get the CLR (production) assys onto the server. For example our company has some clients that don't give us access to their SQL servers but as remote connection via SSMS. So no local path from which you can deploy your assy dll. Solution is to either upload the binary to temp table as binary blob or as 0x -hex string.
Then what happens when you update a function/storedproc? You can't update some assembly that is dependent upon by another assembly (I can't remember if it's only if a function signature changes..). I think we always drop all sp/func/assys before we upload new version of any assembly.
Build/reference system integration is idiotic. When you add reference to a sqlclr, you must have that dll deployed to SQLS. VS will copy that dll from SQLS to "obj/sqlclr" -directory for that project and use it from there then. When you then build that project with TFS build system, you must have that dll there for the build to succeed. (There are workarounds involving shared SQLS server, but..).
When SQLS has production dlls deployed, VS will fail to deploy new dlls. Solution is to drop production dlls.
Getting debugger to work with SQLCLR is a bitch. We most often get tripped by not having our domain username (DOMAIN\username) in 'sqladmin' (or somesuch) group. There is very little in the way of advice that VS/SQLS tells you what is wrong and why it fails to hit a breakpoint.
Then even when you're writing C#, you end up writing SQL in hardcoded strings. I don't know if some helpers exist to avoid this bullshit, there is no nhibernate/sqlalchemy for sqlclr. This is mainly in SP's which need to process many rows/etc. Functions are less affected by this.
This also means that if you use nhibernate or something like that in your BL layer, you will probably be unable to reuse it in sqlclr layer and you will duplicate classes. Instantiating objects from SqlReader is very, very, very off-pissing in year 2009. What MS were thinking is beyond me, unbelievable crap.
All in all I think SQLCLR is way better than T-SQL, but in some situations end up just coding up a T-SQL SP because it's less of a bother.