If you have this working please post the exact code that works. I have changed to set the dataset to the unqualified name of the dataset as you suggest and the result is the same, only the layer at the top level will change anything in feature dataset does not update correctly.
Your post that shows the json is unclear, it shows setting the database item to FeatureClassName which makes no sense, although I did try just in case. This is not Oracle so there is no instance in the way Oracle uses instance, it is a different database in the same Sql Server 'Instance'
{'connection_info': {'authentication_mode': 'DBMS',
'database': 'Staging',
'db_connection_properties': 'portal07',
'dbclient': 'sqlserver',
'instance': 'sde:sqlserver:portal07',
'password': '<*********>',
'server': 'portal07',
'user': 'gis',
'version': 'sde.DEFAULT'},
'dataset': 'Staging.GIS.PipelineAssembly',
'workspace_factory': 'SDE'}
{'connection_info': {'authentication_mode': 'DBMS',
'database': 'fort_collins',
'db_connection_properties': 'portal07',
'dbclient': 'sqlserver',
'instance': 'sde:sqlserver:portal07',
'password': 'gis',
'server': 'portal07',
'user': 'gis',
'version': 'sde.DEFAULT'},
'dataset': 'PipelineAssembly',
'workspace_factory': 'SDE'}
I have run the code replacing everything and also just running with 'database' and 'dataset' being changed. Both have the same result, classes within a Feature Dataset become invalid and it shows the Feature Dataset incorrect. I ran the same code a second time changing the database back and when this is done the datasource becomes valid again (because now the Feature Dataset is correct). I see no way to change the Feature Dataset to an unqualified name so do not know what I am missing
Again, if you have a working sample fo changing the database please post. I am thinking perhaps there is a difference with Oracle and Sql Server but I could just be missing something.
Thanks
Thanks,
-Joe