There are no changes between 3.1.3 and 3.1.5 related to this.
You should be getting the same behavior in 3.1.3; it just depends on
when you call get_instance(). Note that you're getting an instance of the controller, and with you doing this during 404 handling, that doesn't always happen under the same conditions.
When you call show_404() manually, that's most likely on a routed request that you
chose to treat as a 404. But the same logic is also executed automatically when CI did NOT find a route, and thus did not instantiate a controller at all; i.e. there's no controller instance to be returned.