No, that's not a problem.
The ObjectId.GetObject() method implicitly uses the top-level transaction. So it is only an error to call ObjectId.GetObject() if there is no current transaction. The VB code given starts a transaction, so that should be fine.
Richard, this is from Reflection in IL ..
From the VB code
L_0048: call instance class [acdbmgd]Autodesk.AutoCAD.DatabaseServices.DBObject [acdbmgd]Autodesk.
AutoCAD.DatabaseServices.ObjectId::GetObject(valuetype [acdbmgd]Autodesk.AutoCAD.DatabaseServices.OpenMode)
L_004d: castclass [acdbmgd]Autodesk.AutoCAD.DatabaseServices.BlockTableRecord
<...>
From the C# code
L_0076: callvirt instance class [acdbmgd]Autodesk.AutoCAD.DatabaseServices.DBObject [acdbmgd]Autodesk.
AutoCAD.DatabaseServices.Transaction::GetObject(valuetype [acdbmgd]Autodesk.AutoCAD.DatabaseServices.ObjectId, valuetype [acdbmgd]Autodesk.AutoCAD.DatabaseServices.OpenMode, bool)
L_007b: castclass [acdbmgd]Autodesk.AutoCAD.DatabaseServices.BlockTableRecord
<...>
it seems to me the VB does not use the transaction.
I may be placing too much importance on the things I've read .. or misunderstanding them , but the docs ARE pretty clear ...