While Intel's version of SYSCALL can't be used in compatibility mode, the SYSRET instruction can be used from 64-bit mode to "return" to compatibility mode. The SYSRET instruction doesn't require a previous SYSCALL instruction to work, jut like the RET instruction doesn't require a previous CALL instruction.
The Intel 64 and IA-32 Architectures Software Developer's Manual documents the operation of the SYSRET instruction as follows:
IF (CS.L ≠ 1 ) or (IA32_EFER.LMA ≠ 1) or (IA32_EFER.SCE ≠ 1) (* Not in
64-Bit Mode or SYSCALL/SYSRET not enabled in IA32_EFER *)
THEN #UD; FI;
IF (CPL ≠ 0) OR (RCX is not canonical) THEN #GP(0); FI;
IF (operand size is 64-bit)
THEN (* Return to 64-Bit Mode *)
RIP ← RCX;
ELSE (* Return to Compatibility Mode *)
RIP ← ECX;
FI;
RFLAGS ← (R11 & 3C7FD7H) | 2; (* Clear RF, VM, reserved bits; set bit 2 *)
IF (operand size is 64-bit)
THEN CS.Selector ← IA32_STAR[63:48]+16;
ELSE CS.Selector ← IA32_STAR[63:48];
FI;
CS.Selector ← CS.Selector OR 3; (* RPL forced to 3 *)
(* Set rest of CS to a fixed value *)
CS.Base> ← 0; (* Flat segment *)
CS.Limit ← FFFFFH; (* With 4-KByte granularity, implies a 4-GByte limit *)
CS.Type ← 11; (* Execute/read code, accessed *)
CS.S ← 1;
CS.DPL ← 3;
CS.P ← 1;
IF (operand size is> 64-bit)
THEN (* Return to 64-Bit Mode *)
CS.L ← 1; (* 64-bit code segment *)
CS.D ← 0; (* Required if CS.L = 1 *)
ELSE (* Return to Compatibility Mode *)
CS.L ← 0; (* Compatibility mode *)
CS.D ← 1; (* 32-bit code segment *)
FI;
CS.G ← 1; (* 4-KByte granularity *)
CPL ← 3;
[...]
As you can see there are differences between the operation depending on the operand size. Notably with a 32-bit operand size the the CS.L and CS.D flags set to 0 and 1 meaning the CPU begins executing instructions at the address given by ECX in 32-bit compatibility mode. It does this regardless how the kernel (privilege level 0) was entered.
While on Intel CPUs the 32-bit operand size version of SYSRET can't be used in the way that would be the most obvious, to resume execution of a 32-bit compatibility mode task that used SYSCALL to enter the kernel, it could still have other uses. Like starting the execution of a new 32-bit task or maybe even resuming one that entered the kernel by some other means.