Интересно, у меня есть случай, когда у меня есть CALayer, который корректно масштабирует его содержимое, пока я не вызову setNeedsDisplay для него, чтобы перерисовать его содержимое. Одна вещь, которая может отличаться, заключается в том, что в моем случае слой рисуется его делегатом, а не подклассом CALayer. Другая вещь, которая может отличаться, заключается в том, что это на iOS, а не на OSX (я не знаю, что вы используете в этом случае). Возможно, что между подклассами и делегированными нарисованными слоями и / или iOS и OSX могут быть различия в поведении.
Еще одна вещь, на которую следует обратить внимание, это то, что needsDisplayOnBoundsChange задокументировано как NO по умолчанию, поэтому не нужно его устанавливать. Я специально не устанавливаю needsDisplayOnBoundsChange на свой слой.
Вы можете попробовать использовать делегата для рисования, чтобы увидеть, имеет ли это значение. Обратите внимание, что UIView не может быть делегатом для CALayer. В моем случае я сделал простой объект делегата, который перенаправляет вызов отрисовки на мое представление.