Так что, тут важно не кто создаёт объект, а область его использования. Если она выходит за рамки кода, то диспозить его не нужно.
Кстати, ещё пример вспомнил. В методе TransformOverrule.Explode можно изменить коллекцию получаемых после взрыва объектов. Для этого мы их создаём (не AutoCAD) и помещаем в выходную коллекцию. Попробуйте их диспозить, следуя логике "из книжки"
Александр правильно говорит, особых правил нет
Метод Dispose() создается программистом, подразумевая что необходимо выполнить какие-то действия перед окончанием использования объекта. Например в метод могут запихнуть закрыть файл, подключение к БД, или просто оставить метод пустым.
Но не известно в какой момент программист подразумевал его запуск.
Одно лишь известно, что сборщик мусора при удалении объекта из памяти вызывает предварительно метод Dispose
Будет ли это корректно в момент вызова метода, зависит от реализации метода.
У AutoCAD все объекты унаследованы от DisposableWrapper, т.е. для всех них будет вызван метод Dispose(). Тут главный вопрос кто и когда будет его вызывать и единого правила нет.
Есть лишь общая рекомендация по IDisposable, что если видишь, что объект унаследован от интерфейса IDisposable, то значит программист подразумевал, что перед окончанием использования объекта должны производиться какие-то действия. Ели этот метод вызывает приложение, то не вызывай. Если сборщик мусора, то лучше ты, чем он.