There are actually two types of Power Apps - model-driven and canvas apps. Canvas apps are primarily concerned with the user interface and are created by dragging and dropping various components (text boxes, drop-down lists, images, formulas, etc.) onto a blank design screen or "canvas". The developer has full control over every aspect of the design, including the type, size, and formatting of the components. In addition, canvas apps aren't restricted to a single data source. You can attach multiple sources to your app, ranging from Excel spreadsheets to SQL databases. So, what is a model-driven application? Here's a definition from Wikipedia:
A model-driven application is a software application that the functions or behaviors are based on, or in control of, some evolutionary applied models of the target things to the application.
If that didn't entirely clear it up for you, model-driven apps are based on the data connected to them. Rather than the person creating the app having control over the design the user interface elements are selected based on the underlying data. You can see the same approach in some other platforms (such as AppSheets or Mendix) where the entire app is built by the platform according to the data being fed to it with very little room for changes in the overall design.
While canvas apps tend to be built for a specific task (helpdesk ticketing, event scheduling, employee timesheet management, etc.), model-driven apps are more generalized and can be adapted to various purposes, such as customer service management or business process management. Model-driven apps can also be used as a backend by embedding canvas apps inside them.
In addition, model-driven software isn't composed of program code like canvas apps. Model-driven apps are basically a set of particular options chosen from those available with the design model itself and at runtime the platform simply executes a modified version of the model rather than a series of custom program codes.
So, when do you use each type of app? Basically, you would use a canvas application when you want to create a program for a specific purpose and you want the user to be able to control the different functions in the application. On the other hand, if you want to have the users' actions to be guided by a certain procedure or process, that's when you would use a model-driven application.