Hi @peter-g
Yes, as you mentioned we need to use assetManager.createRevision() to create initial version of asset before replacing content of Asset A by Asset B. please check below code which will create version & replace content as expected.
try (ResourceResolver resourceResolver = request.getResourceResolver()){
AssetManager assetManager = resourceResolver.adaptTo(AssetManager.class);
Resource resourceAssetA = resourceResolver.getResource("/content/dam/test/jane_doe.jpg");
Resource resourceAssetB = resourceResolver.getResource("/content/dam/test/larry_spiller.jpg");
if(resourceAssetA!= null && resourceAssetB!= null) {
Asset assetA = resourceAssetA.adaptTo(Asset.class);
Asset assetB = resourceAssetB.adaptTo(Asset.class);
assetManager.createRevision(assetA, "message to create initial version of asset", assetA.getName());
Rendition renditionAssetB = assetB.getOriginal();
assetManager.createAsset(assetA.getPath(), renditionAssetB.getStream(), renditionAssetB.getMimeType(), false);
}
if(resourceResolver.hasChanges()){
resourceResolver.commit();
}
} catch (Exception e) {
e.printStackTrace();
}
Before creating version & replacing asset content :

After creating version & replacing asset content :

After deleting original asset(Asset B) from which content is copied from , it will not affect to asset(Asset A) which has copied content.

-Manjunath