In order for a processor to enter kernel (or another elevated) mode, it must do so through an interrupt or an exception. Because you are asking about system calls, we are dealing with exception.
[As the risk of gross oversimplification, especially Intel's strangeness...]
Any hardware exception (e.g., access violation, divide by zero, page fault) causes the processor to enter kernel mode. Each exception has a number defined by the processor. When an exception occurs, the processor dispatches to an exception handler. Usually, the processor has registers that define the location and length of an array of exception handlers. When Exception #2 occurs, the CPU invokes the third handler in the array (0, 1, 2).
Processors invariable have instructions for triggering exceptions for specific purposes, such as debugging and system calls.
To make a system call, you invoke a processor instruction that causes an exception that dispatches to the exception handler that performs the system call. At the end of the system call, the handler invokes a special return from exception/interrupt instruction that returns the processor to user mode.
Thus, your #1 is largely correct.
Your #2 is completely wrong in most operating systems. Interrupts and exceptions are handled by the process that is currently executing (Linux uses different terminology but functionally it is the same).
If your process does a read to a disk, it will likely suspend while waiting for a respond. Another process will be running when the interrupt occurs signaling YOUR disk I/O is complete. THAT process will handle the interrupt for YOUR I/O. It will then queue your I/O request to your process and set you process state to runnable. The next time your process is schedule to run, it can pick up its completed I/O request.